Beispiel #1
0
/**
 * @brief	This function processes the delete port to IGD(Internet Gateway Device).
 * @return	0: success, -2: Invalid UPnP Step, -1: reply packet timeout, 1: received xml parse error, other: UPnP error code
 */
signed short DeletePortProcess(
  SOCKET sockfd,	/**< a socket number. */
  const char* protocol,	/**< a procotol name. "TCP" or "UDP" */
  const unsigned int extertnal_port	/**< an external port number. */
  )
{
	short len=0;
	long endTime=0;
	uint32 ipaddr;
	uint16 port;

	// Check UPnP Step
	if(UPnP_Step < 2) return -2;

	// Make "Delete Port" XML(SOAP)
	memset(content, '\0', MAX_BUFFER);
	MakeSOAPDeleteControl(content, protocol, extertnal_port);

	// Make HTTP POST Header
	memset(send_buffer, '\0', MAX_BUFFER);
	len = strlen(content);
	MakePOSTHeader(send_buffer, len, DELETE_PORT);
	strcat(send_buffer, content);

#ifdef UPNP_DEBUG
	printf("%s\r\n", send_buffer);
#endif

        ipaddr = inet_addr((uint8*)descIP);
        ipaddr = swapl(ipaddr);
        port = ATOI(descPORT, 10);

	// Connect to IGD(Internet Gateway Device)
	if(TCPClientOpen(sockfd, PORT_UPNP, (uint8*)&ipaddr, port) == FAIL) printf("TCP Socket Error!!\r\n");

	// Send "Delete Port" Message
	while(GetTCPSocketStatus(sockfd) != STATUS_ESTABLISHED);
	TCPSend(sockfd, (void *)send_buffer, strlen(send_buffer));

	// Receive Reply
	memset(recv_buffer, '\0', MAX_BUFFER);
	Delay_ms(500);
	endTime = my_time + 3;
	while (TCPRecv(sockfd, (void *)recv_buffer, MAX_BUFFER) <= 0 && my_time < endTime);	// Check Receive Buffer of W5200
	if(my_time >= endTime){	// Check Timeout
		TCPClose(sockfd);
		return -1;
	}

	// TCP Socket Close
        TCPClose(sockfd);

#ifdef UPNP_DEBUG
	printf("\r\nReceiveData\r\n%s\r\n", recv_buffer);
#endif

	// Parse Replied Message
	return parseDeletePort(recv_buffer);
}
Beispiel #2
0
/**
 * @brief	This function gets the description message from IGD(Internet Gateway Device).
 * @return	0: success, -2: Invalid UPnP Step, -1: reply packet timeout, 1: received xml parse error
 */
signed char GetDescriptionProcess(
  SOCKET sockfd 	/**< a socket number. */
  )
{
	char ret_value=0;
        long endTime=0;
        uint32 ipaddr;
        uint16 port;

	// Check UPnP Step
	if(UPnP_Step < 1) return -2;

	// Make HTTP GET Header
	memset(send_buffer, '\0', MAX_BUFFER);
	MakeGETHeader(send_buffer);

#ifdef UPNP_DEBUG
	printf("%s\r\n", send_buffer);
#endif

        ipaddr = inet_addr((uint8*)descIP);
        ipaddr = swapl(ipaddr);
        port = ATOI(descPORT, 10);

	// Connect to IGD(Internet Gateway Device)
	if(TCPClientOpen(sockfd, PORT_UPNP, (uint8*)&ipaddr, port) == FAIL) printf("TCP Socket Error!!\r\n");

	// Send Get Discription Message
	while(GetTCPSocketStatus(sockfd) != STATUS_ESTABLISHED);
	TCPSend(sockfd, (void *)send_buffer, strlen(send_buffer));

	// Receive Reply
	memset(recv_buffer, '\0', MAX_BUFFER);
	Delay_ms(500);
	endTime = my_time + 3;
	while (TCPRecv(sockfd, (void *)recv_buffer, MAX_BUFFER) <= 0 && my_time < endTime);	// Check Receive Buffer of W5200
	if(my_time >= endTime){	// Check Timeout
		TCPClose(sockfd);
		return -1;
	}

	// TCP Socket Close
	TCPClose(sockfd);

#ifdef UPNP_DEBUG
	printf("\r\nReceiveData\r\n%s\r\n", recv_buffer);
#endif

	// Parse Discription Message
	if((ret_value = parseDescription(recv_buffer)) == 0) UPnP_Step = 2;
	return ret_value;
}
Beispiel #3
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);
	}
}
Beispiel #4
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);
    }
}
Beispiel #5
0
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;
	}	
}