Exemplo n.º 1
0
void act_nopen_a(int8 type,  int8 save, uint16 sport, uint8 *dip, uint16 dport)
{
	int8 ret, sock, i;

	for(i=ATC_SOCK_NUM_START; i<=ATC_SOCK_NUM_END; i++) {
		if(sockstat[i] != SOCK_STAT_IDLE && sockport[i] == sport) {
			DBGA("src port(%d) is using now by sock(%d)", sport, i);
			MAKE_TCMD_DIGIT(atci.tcmd.arg1, 2);
			CMD_RESP_RET(RET_WRONG_ARG, VAL_NONE);
		}
	}

	if(save == 'S' || save == 'A') {
		
	}

	if(save == 'O' || save == 'A') {
		if(type == 'S') {
			sock = sock_get(SOCK_STAT_TCP_SRV, sport);
			if(sock == RET_NOK) CMD_RESP_RET(RET_NO_SOCK, VAL_NONE);
			ret = TCPServerOpen(sock, sport);
			if(ret != RET_OK) CMD_RESP_RET(RET_UNSPECIFIED, VAL_NONE);
			sockwatch_set(sock, WATCH_SOCK_CONN_EVT);
			CMD_RESP_RET(RET_OK, sock);
		} else if(type == 'C') {
			sock = sock_get(SOCK_STAT_TCP_CLT, sport);
			if(sock == RET_NOK) CMD_RESP_RET(RET_NO_SOCK, VAL_NONE);
			ret = TCPCltOpenNB(sock, sport, dip, dport);
			if(ret != RET_OK) {
				DBGA("TCPCltOpenNB fail - ret(%d)", ret);
				CMD_RESP_RET(RET_WRONG_ADDR, VAL_NONE);
			}
			sockwatch_set(sock, WATCH_SOCK_CONN_TRY);
			sockbusy[sock] = VAL_TRUE;
			CMD_RESP_RET(RET_ASYNC, sock);
		} else {
			if(dip != NULL) {
				memcpy(udpip[sock], dip, 4);
				udpport[sock] = dport;
			}
			sock = sock_get(SOCK_STAT_UDP, sport);
			if(sock == RET_NOK) CMD_RESP_RET(RET_NO_SOCK, VAL_NONE);
			UDPOpen(sock, sport);
			sockwatch_set(sock, WATCH_SOCK_RECV);
			CMD_RESP_RET(RET_OK, sock);
		}
	}
}
Exemplo n.º 2
0
//processing http protocol , and excuting the followed fuction.
void WebServer(uint8 s)
{
	int ret;
	uint32 header_len=0, content_len=0, received_len=0;
	char sub[10];

	/* http service start */
	ret = TCPRecv(s, (int8*)rx_buf, MAX_URI_SIZE);

	if(ret > 0){					// If Received..
		*(((uint8*)rx_buf)+ret) = '\0';

		if(strstr(rx_buf, "Content-Length: ")){
			mid((char*)rx_buf, "Content-Length: ", "\r\n", sub);
			content_len=atoi(sub);
			header_len = (uint32)(strstr(rx_buf, "\r\n\r\n") - rx_buf + 4);

			received_len = ret;
			while(received_len!=(content_len+header_len))
			{
				ret = TCPRecv(s, (int8*)rx_buf+received_len, MAX_URI_SIZE);
				received_len+=ret;
			}

			*(((uint8*)rx_buf)+received_len) = '\0';
		}

		HTTPProcessor(s, (char*)rx_buf);	// request is processed
		memset(rx_buf,0x00,MAX_URI_SIZE);

		TCPDisconnect(s);

	} else if(ret == SOCKERR_NOT_TCP){		// Not TCP Socket, It's UDP Socket
		DBG("UDP Socket Close");
		UDPClose(s);

	} else if(ret == SOCKERR_CLOSED){			// Socket Closed
		LOGA("HTTP Server Started - ch(%d)",(uint16)s);
		TCPServerOpen(s, DEFAULT_HTTP_PORT);
	}

	if(GetTCPSocketStatus(s) == SOCKERR_CLOSE_WAIT){// Close waiting
		TCPClose(s);
	}
}
Exemplo n.º 3
0
void loopback_tcps(uint8 ch, uint16 port)
{
    int ret;
    int SendLen, ReSendLen;

    ret = TCPRecv(ch, data_buf, TX_RX_MAX_BUF_SIZE);

    if(ret > 0) {				// Received
        SendLen = TCPSend(ch, data_buf, ret);

        if(SendLen < ret) {
            while(SendLen != ret) {
                ReSendLen = TCPReSend(ch);

                if(ReSendLen > 0) {
                    SendLen += ReSendLen;

                } else if(ReSendLen == ERROR_WINDOW_FULL) {
                    LOG("Window Full");
                    TCPClose(ch);
                    DBG("TCP Socket Close");
                    while(1);

                } else {
                    break;
                }
            }
        }

    } else if(ret == ERROR_NOT_TCP_SOCKET) {	// Not TCP Socket, It's UDP Socket
        DBG("UDP Socket Close");
        UDPClose(ch);
    } else if(ret == ERROR_CLOSED) {		// Socket Closed
        LOGA("TCP Loop-Back Started - ch(%d)",(uint16)ch);
        TCPServerOpen(ch, port);
    }

    if(GetTCPSocketStatus(ch) == STATUS_CLOSE_WAIT) {	// Close waiting
        TCPClose(ch);
    }
}
Exemplo n.º 4
0
/**
 * @brief	This function listenes the eventing message from IGD(Internet Gateway Device).
 */
void eventing_listener(
  SOCKET sockfd 	/**< a socket number. */
  )
{
	uint16 len;
        const uint8 HTTP_OK[] = "HTTP/1.1 200 OK\r\n\r\n";

	switch (getSn_SR(sockfd))
	{
		case SOCK_ESTABLISHED:					/* if connection is established */
			Delay_ms(500);
			if((len = getSn_RX_RSR(sockfd)) > 0){
				TCPRecv(sockfd, (void *)recv_buffer, len);
				TCPSend(sockfd, (void *)HTTP_OK, strlen((void *)HTTP_OK));
				parseEventing(recv_buffer);
#ifdef UPNP_DEBUG
				printf("\r\nReceiveData\r\n%s\r\n", recv_buffer);
#endif
			}

		break;

		case SOCK_CLOSE_WAIT:					/* If the client request to close */
			if ((len = getSn_RX_RSR(sockfd)) > 0) 		/* check Rx data */
			{
				TCPRecv(sockfd, (void *)recv_buffer, len);	/* read the received data */
			}
			TCPClose(sockfd);
		break;

		case SOCK_CLOSED:					/* if a socket is closed */
			if(TCPServerOpen(sockfd,PORT_UPNP_EVENTING) == FAIL)	/* reinitialize the socket */
			{
				printf("\r\n%d : Fail to create socket.",sockfd);
			}
		break;

		default:
		break;
	}
}
Exemplo n.º 5
0
Arquivo: ftp.c Projeto: KISSMonX/W7200
void ftp_client_DTP(uint8 sock)
{
	int   len;
        int   idx;
	
	
	switch( GetTCPSocketStatus(sock) )
	{
		case STATUS_ESTABLISHED:
			if(bRunDTP)
			{
				bRunDTP = 0;
#ifdef Debug				
				printf("< FTP_DTP Connect OK>\r\n");
#endif
			}
                        
                        len = TCPRecv(sock, data_buf, TX_RX_MAX_BUF_SIZE);
                        
                        if( len > 0 )
                        {
				for( idx = 0; idx < len; idx++ )
				{
					if( idx == 0 )
						printf("\r\n");
					
					printf("%c",data_buf[idx]);
				}
                        }
			
			if( bRunPutFile )
			{
				bRunPutFile = 0;
				TCPSend(sock, (void *)PUTFILE, strlen(PUTFILE));
				TCPClose(sock);
			}
			break;
			
		case STATUS_CLOSE_WAIT:
                        
			len = TCPRecv(sock, data_buf, TX_RX_MAX_BUF_SIZE);
                        
                        if( len > 0 )
                        {
				for( idx = 0; idx < len; idx++ )
				{
					if( idx == 0 )
						printf("\r\n");
					
					printf("%c",data_buf[idx]);
				}
                        }
			
			if( bRunPutFile )
			{
				bRunPutFile = 0;
				TCPSend(sock, (void *)PUTFILE, strlen(PUTFILE));
			}

			TCPClose(sock);
			break;
			
		case STATUS_CLOSED:
			
			TCPClose(sock);
			if( TCPServerOpen( sock, DTP_Port++ ) == 0 )
			{
				printf("\r\nDTP Socket Open Error");
				break;
			}
                        
                        if( DTP_Port > 70000 )
                                DTP_Port = FTP_Client_TCPS_Port;
                        
			bRunDTP = 1;
			break;
	}	
}