shell.c
来自「Keil下移植好的lwip基于c166」· C语言 代码 · 共 1,061 行 · 第 1/3 页
C
1,061 行
sendstr("Connection identifier not in use.\n", com->conn);
return ESUCCESS;
}
err = netconn_close(conns[i]);
if(err != ERR_OK) {
sendstr("Could not close connection: ", com->conn);
#ifdef LWIP_DEBUG
sendstr(lwip_strerr(err), com->conn);
#else
sendstr("(debugging must be turned on for error message to appear)", com->conn);
#endif /* LWIP_DEBUG */
sendstr("\n", com->conn);
return ESUCCESS;
}
sendstr("Connection closed.\n", com->conn);
netconn_delete(conns[i]);
conns[i] = NULL;
return ESUCCESS;
}
/*-----------------------------------------------------------------------------------*/
static s8_t
com_acpt(struct command *com)
{
int i, j;
/* Find the first unused connection in conns. */
for(j = 0; j < NCONNS && conns[j] != NULL; j++);
if(j == NCONNS) {
sendstr("No more connections avaliable, sorry.\n", com->conn);
return ESUCCESS;
}
i = strtol(com->args[0], NULL, 10);
if(i > NCONNS) {
sendstr("Connection identifier too high.\n", com->conn);
return ESUCCESS;
}
if(conns[i] == NULL) {
sendstr("Connection identifier not in use.\n", com->conn);
return ESUCCESS;
}
conns[j] = netconn_accept(conns[i]);
if(conns[j] == NULL) {
sendstr("Could not accept connection: ", com->conn);
#ifdef LWIP_DEBUG
sendstr(lwip_strerr(netconn_err(conns[i])), com->conn);
#else
sendstr("(debugging must be turned on for error message to appear)", com->conn);
#endif /* LWIP_DEBUG */
sendstr("\n", com->conn);
return ESUCCESS;
}
sendstr("Accepted connection, connection identifier for new connection is ", com->conn);
sprintf((char *)buffer, "%d\n", j);
netconn_write(com->conn, buffer, strlen((const char *)buffer), NETCONN_COPY);
return ESUCCESS;
}
/*-----------------------------------------------------------------------------------*/
static s8_t
com_stat(struct command *com)
{
int i;
char buf[100];
u16_t len;
for(i = 0; i < sizeof(struct stats_) / 2; i++) {
len = sprintf(buf, "%d", ((u16_t *)&lwip_stats)[i]);
sendstr(stat_msgs[i], com->conn);
netconn_write(com->conn, buf, len, NETCONN_COPY);
sendstr("\n", com->conn);
}
return ESUCCESS;
}
/*-----------------------------------------------------------------------------------*/
static s8_t
com_send(struct command *com)
{
int i;
err_t err;
int len;
i = strtol(com->args[0], NULL, 10);
if(i > NCONNS) {
sendstr("Connection identifier too high.\n", com->conn);
return ESUCCESS;
}
if(conns[i] == NULL) {
sendstr("Connection identifier not in use.\n", com->conn);
return ESUCCESS;
}
len = strlen(com->args[1]);
com->args[1][len] = '\r';
com->args[1][len + 1] = '\n';
com->args[1][len + 2] = 0;
err = netconn_write(conns[i], com->args[1], len + 3, NETCONN_COPY);
if(err != ERR_OK) {
sendstr("Could not send data: ", com->conn);
#ifdef LWIP_DEBUG
sendstr(lwip_strerr(err), com->conn);
#else
sendstr("(debugging must be turned on for error message to appear)", com->conn);
#endif /* LWIP_DEBUG */
sendstr("\n", com->conn);
return ESUCCESS;
}
sendstr("Data enqueued for sending.\n", com->conn);
return ESUCCESS;
}
/*-----------------------------------------------------------------------------------*/
static s8_t
com_recv(struct command *com)
{
int i;
err_t err;
struct netbuf *buf;
u16_t len;
i = strtol(com->args[0], NULL, 10);
if(i > NCONNS) {
sendstr("Connection identifier too high.\n", com->conn);
return ESUCCESS;
}
if(conns[i] == NULL) {
sendstr("Connection identifier not in use.\n", com->conn);
return ESUCCESS;
}
buf = netconn_recv(conns[i]);
if(buf != NULL) {
netbuf_copy(buf, buffer, 1024);
len = netbuf_len(buf);
sendstr("Reading from connection:\n", com->conn);
netconn_write(com->conn, buffer, len, NETCONN_COPY);
netbuf_delete(buf);
} else {
sendstr("EOF.\n", com->conn);
}
err = netconn_err(conns[i]);
if(err != ERR_OK) {
sendstr("Could not receive data: ", com->conn);
#ifdef LWIP_DEBUG
sendstr(lwip_strerr(err), com->conn);
#else
sendstr("(debugging must be turned on for error message to appear)", com->conn);
#endif /* LWIP_DEBUG */
sendstr("\n", com->conn);
return ESUCCESS;
}
return ESUCCESS;
}
/*-----------------------------------------------------------------------------------*/
static s8_t
com_udpc(struct command *com)
{
struct ip_addr ipaddr;
u16_t lport, rport;
int i;
err_t err;
lport = strtol(com->args[0], NULL, 10);
if(inet_aton(com->args[1], (struct in_addr *)&ipaddr) == -1) {
sendstr(strerror(errno), com->conn);
return ESYNTAX;
}
rport = strtol(com->args[2], NULL, 10);
/* Find the first unused connection in conns. */
for(i = 0; i < NCONNS && conns[i] != NULL; i++);
if(i == NCONNS) {
sendstr("No more connections avaliable, sorry.\n", com->conn);
return ESUCCESS;
}
sendstr("Setting up UDP connection from port ", com->conn);
netconn_write(com->conn, com->args[0], strlen(com->args[0]), NETCONN_COPY);
sendstr(" to ", com->conn);
netconn_write(com->conn, com->args[1], strlen(com->args[1]), NETCONN_COPY);
sendstr(":", com->conn);
netconn_write(com->conn, com->args[2], strlen(com->args[2]), NETCONN_COPY);
sendstr("\n", com->conn);
conns[i] = netconn_new(NETCONN_UDP);
if(conns[i] == NULL) {
sendstr("Could not create connection identifier (out of memory).\n", com->conn);
return ESUCCESS;
}
err = netconn_connect(conns[i], &ipaddr, rport);
if(err != ERR_OK) {
netconn_delete(conns[i]);
conns[i] = NULL;
sendstr("Could not connect to remote host: ", com->conn);
#ifdef LWIP_DEBUG
sendstr(lwip_strerr(err), com->conn);
#else
sendstr("(debugging must be turned on for error message to appear)", com->conn);
#endif /* LWIP_DEBUG */
sendstr("\n", com->conn);
return ESUCCESS;
}
err = netconn_bind(conns[i], IP_ADDR_ANY, lport);
if(err != ERR_OK) {
netconn_delete(conns[i]);
conns[i] = NULL;
sendstr("Could not bind: ", com->conn);
#ifdef LWIP_DEBUG
sendstr(lwip_strerr(err), com->conn);
#else
sendstr("(debugging must be turned on for error message to appear)", com->conn);
#endif /* LWIP_DEBUG */
sendstr("\n", com->conn);
return ESUCCESS;
}
sendstr("Connection set up, connection identifier is ", com->conn);
sprintf((char *)buffer, "%d\n", i);
netconn_write(com->conn, buffer, strlen((const char *)buffer), NETCONN_COPY);
return ESUCCESS;
}
/*-----------------------------------------------------------------------------------*/
static s8_t
com_udpl(struct command *com)
{
struct ip_addr ipaddr;
u16_t lport, rport;
int i;
err_t err;
lport = strtol(com->args[0], NULL, 10);
if(inet_aton(com->args[1], (struct in_addr *)&ipaddr) == -1) {
sendstr(strerror(errno), com->conn);
return ESYNTAX;
}
rport = strtol(com->args[2], NULL, 10);
/* Find the first unused connection in conns. */
for(i = 0; i < NCONNS && conns[i] != NULL; i++);
if(i == NCONNS) {
sendstr("No more connections avaliable, sorry.\n", com->conn);
return ESUCCESS;
}
sendstr("Setting up UDP-Lite connection from port ", com->conn);
netconn_write(com->conn, com->args[0], strlen(com->args[0]), NETCONN_COPY);
sendstr(" to ", com->conn);
netconn_write(com->conn, com->args[1], strlen(com->args[1]), NETCONN_COPY);
sendstr(":", com->conn);
netconn_write(com->conn, com->args[2], strlen(com->args[2]), NETCONN_COPY);
sendstr("\n", com->conn);
conns[i] = netconn_new(NETCONN_UDPLITE);
if(conns[i] == NULL) {
sendstr("Could not create connection identifier (out of memory).\n", com->conn);
return ESUCCESS;
}
err = netconn_connect(conns[i], &ipaddr, rport);
if(err != ERR_OK) {
netconn_delete(conns[i]);
conns[i] = NULL;
sendstr("Could not connect to remote host: ", com->conn);
#ifdef LWIP_DEBUG
sendstr(lwip_strerr(err), com->conn);
#else
sendstr("(debugging must be turned on for error message to appear)", com->conn);
#endif /* LWIP_DEBUG */
sendstr("\n", com->conn);
return ESUCCESS;
}
err = netconn_bind(conns[i], IP_ADDR_ANY, lport);
if(err != ERR_OK) {
netconn_delete(conns[i]);
conns[i] = NULL;
sendstr("Could not bind: ", com->conn);
#ifdef LWIP_DEBUG
sendstr(lwip_strerr(err), com->conn);
#else
sendstr("(debugging must be turned on for error message to appear)", com->conn);
#endif /* LWIP_DEBUG */
sendstr("\n", com->conn);
return ESUCCESS;
}
sendstr("Connection set up, connection identifier is ", com->conn);
sprintf((char *)buffer, "%d\n", i);
netconn_write(com->conn, buffer, strlen((const char *)buffer), NETCONN_COPY);
return ESUCCESS;
}
/*-----------------------------------------------------------------------------------*/
static s8_t
com_udpn(struct command *com)
{
struct ip_addr ipaddr;
u16_t lport, rport;
int i;
err_t err;
lport = strtol(com->args[0], NULL, 10);
if(inet_aton(com->args[1], (struct in_addr *)&ipaddr) == -1) {
sendstr(strerror(errno), com->conn);
return ESYNTAX;
}
rport = strtol(com->args[2], NULL, 10);
/* Find the first unused connection in conns. */
for(i = 0; i < NCONNS && conns[i] != NULL; i++);
if(i == NCONNS) {
sendstr("No more connections avaliable, sorry.\n", com->conn);
return ESUCCESS;
}
sendstr("Setting up UDP connection without checksums from port ", com->conn);
netconn_write(com->conn, com->args[0], strlen(com->args[0]), NETCONN_COPY);
sendstr(" to ", com->conn);
netconn_write(com->conn, com->args[1], strlen(com->args[1]), NETCONN_COPY);
sendstr(":", com->conn);
netconn_write(com->conn, com->args[2], strlen(com->args[2]), NETCONN_COPY);
sendstr("\n", com->conn);
conns[i] = netconn_new(NETCONN_UDPNOCHKSUM);
if(conns[i] == NULL) {
sendstr("Could not create connection identifier (out of memory).\n", com->conn);
return ESUCCESS;
}
err = netconn_connect(conns[i], &ipaddr, rport);
if(err != ERR_OK) {
netconn_delete(conns[i]);
conns[i] = NULL;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?