示例#1
0
/*
 * Get line from naked TCP stream.
 */
static int GetLine(TCPSOCKET * sock, char * line, uint16_t size)
{
    int rc = 0;
    uint8_t to_cnt = 0;
    int got;
    char *cp = line;

    if (size > 0) {
        for (;;) {
            if ((got = NutTcpReceive(sock, cp, 1)) <= 0) {
                if (got == 0 && to_cnt++ < 10)
                    continue;
                rc = got;
                printf("[GL-TO]");
                break;
            }
            if (*cp == '\n') {
                *cp = 0;
                break;
            }
            if (*cp != '\r' && rc < (int) size) {
                rc++;
                cp++;
            }
        }
    }
    return rc;
}
示例#2
0
int clientReceive(TCPSOCKET *sock, char *buffer, int len){
	int got;
	got = NutTcpReceive(sock, buffer, len);
	if (got <= 0) {
    LogMsg_P(LOG_INFO, PSTR("Fout bij ontvangen client data"));
	}
	return got;
}
THREAD(bin_cmd_thread0, arg)
{
	uint8_t count = 0;
	TCPSOCKET * sock;
	char buff[256];
	uint32_t time = 15000;

	NutThreadSetPriority(TCP_BIN_SERVER_PRI);

	if(THISINFO)printf("CMD:Thraed running...\r\n");

	while(1) {
		//if(THISINFO)printf("Start Create Socket(%d)\r\n",count++);
		sock = NutTcpCreateSocket();
		if(sock == 0) {
			if(THISERROR)printf("CMD:Create socket failed!\r\n");
			continue;
		}
		NutTcpSetSockOpt(sock,SO_RCVTIMEO,&time,sizeof(uint32_t));
		if(THISINFO)printf("CMD: NutTcpAccept at port %d\r\n",gwork_port);
		if(NutTcpAccept(sock,gwork_port)) {
			NutTcpCloseSocket(sock);
			if(THISERROR)printf("CMD:NutTcpAccept Timeout! NutTcpCloseSocket and reaccept.\r\n");
			continue;
		}
		if(THISINFO)printf("CMD:Tcp Accept one connection.\r\n");
		count = 0;
		while(1) {
			int len = NutTcpReceive(sock,buff,sizeof(buff));
            if(len == 0) {
				if(THISINFO)printf("Tcp Recieve timeout.\r\n");
				if(++count == 1) {
					if(THISINFO)printf("Tcp Send Io Out Data.\r\n");
				    //NutTcpSend(sock,"OK",strlen("OK"));
					{
						//都继电器状态的模拟请求。
						uint8_t  buffer[sizeof(CmdHead)] = {0x01,0x00,0x00,0x00,0x00,0x00,0x00};
						CmdGetIoOutValue(sock,(CmdHead *)buffer,sizeof(buffer));
					}
				}
				if(++count >= 3) {
					if(THISINFO)printf("Close Command Socket\r\n");
					break;
				}
			} else if(len == -1) {
				int error = NutTcpError(sock);
				if(THISERROR)printf("CMD:Tcp Receive ERROR(%d)\r\n",error);
				if(error == ENOTCONN)  {
					if(THISERROR)printf("CMD:Socket is not connected,break connecting\r\n");
					break;
				} else {
					if(THISERROR)printf("CMD:Socket is unknow error,break connecting\r\n");
					break;
				}
			} else if(len > 0) {
				//printf("Get One Tcp packet length(%d)\r\n",len);
				BinCmdPrase(sock,buff,len);
			}
		}
		NutTcpCloseSocket(sock);
	}
}
示例#4
0
/*
 * Process embedded meta data.
 */
static char *ReadMetaTitle(TCPSOCKET * sock, uint32_t iv)
{
    uint8_t blks = 0;
    uint16_t cnt;
    int got;
    int rc = 0;
    char *title = 0;
    char *buf;
    char *mn1;
    char *mn2;
    char *md1;
    char *md2;

    /* Allocate temporary buffer. */
    if ((buf = malloc(512 + 1)) == 0) {
        return 0;
    }
    for (cnt = 512; iv; iv -= got) {
        if (iv < 512)
            cnt = iv;
        if ((got = NutTcpReceive(sock, buf, cnt)) <= 0)
            break;
    }

    if (iv == 0) {
        /* Get the number of meta data blocks. */
        if ((got = NutTcpReceive(sock, &blks, 1)) == 1) {
            if (blks && blks <= 32) {

                /* Receive the metadata block. */
                for (cnt = blks * 16; cnt; cnt -= got) {
                    if ((got = NutTcpReceive(sock, buf + rc, cnt)) < 0)
                        break;
                    rc += got;
                    buf[rc] = 0;
                }
                if (cnt == 0) {
                    mn1 = buf;
                    while (mn1) {
                        if ((mn2 = strchr(mn1, ';')) != 0)
                            *mn2++ = 0;
                        if ((md1 = strchr(mn1, '=')) != 0) {
                            *md1++ = 0;
                            while (*md1 == ' ' || *md1 == '\'')
                                md1++;
                            if ((md2 = strrchr(md1, '\'')) != 0)
                                *md2 = 0;
                            if (strcasecmp(mn1, "StreamTitle") == 0) {
                                title = malloc(strlen(md1) + 1);
                                strcpy(title, md1);
                                break;
                            }
                        }
                        mn1 = mn2;
                    }
                }
            } else
                printf("[ML=%u]", blks);
        }
    } else
        puts("[SMFAIL]");
    free(buf);
    return title;
}