for EthernetInterface library compatibility.\\ ** Unoffical fix. may be a problem. **

Dependents:   SNIC-httpclient-example SNIC-ntpclient-example

Fork of SNICInterface by muRata

Revision:
27:dcc4f34448f0
Parent:
24:987e412ae879
Child:
29:6a0ba999597d
--- a/Socket/Socket.cpp	Fri Mar 28 03:03:40 2014 +0000
+++ b/Socket/Socket.cpp	Mon Mar 31 02:06:14 2014 +0000
@@ -51,7 +51,50 @@
 
 int Socket::close(bool shutdown)
 {
+    C_SNIC_Core               *snic_core_p  = C_SNIC_Core::getInstance();
+    C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand();
+    // Get buffer for response payload from MemoryPool
+    C_SNIC_Core::tagMEMPOOL_BLOCK_T *payload_buf = snic_core_p->allocCmdBuf();
+    if( payload_buf == NULL )
+    {
+        printf("socket close payload_buf NULL\r\n");
+        return -1;
+    }
+
+    C_SNIC_Core::tagSNIC_CLOSE_SOCKET_REQ_T req;
     
+    // Make request
+    req.cmd_sid   = UART_CMD_SID_SNIC_CLOSE_SOCKET_REQ;
+    req.seq       = mUartRequestSeq++;
+    req.socket_id = mSocketID;
+
+    unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
+    unsigned int  command_len;
+    // Preparation of command
+    command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_SNIC, req.cmd_sid, (unsigned char *)&req
+                            , sizeof(C_SNIC_Core::tagSNIC_CLOSE_SOCKET_REQ_T), payload_buf->buf, command_array );
+
+    // Send uart command request
+    snic_core_p->sendUart( command_len, command_array );
+
+    int ret;
+    // Wait UART response
+    ret = uartCmdMgr_p->wait();
+    if( ret != 0 )
+    {
+        printf( "socket close failed\r\n" );
+        snic_core_p->freeCmdBuf( payload_buf );
+        return -1;
+    }
+    
+    if( uartCmdMgr_p->getCommandStatus() != 0 )
+    {
+        printf("socket close status:%02x\r\n", uartCmdMgr_p->getCommandStatus());
+        snic_core_p->freeCmdBuf( payload_buf );
+        return -1;
+    }
+    snic_core_p->freeCmdBuf( payload_buf );
+
     return 0;
 }
 
@@ -124,3 +167,44 @@
 
     return 0;
 }
+
+int Socket::addrToInteger( const char *addr_p )
+{
+    if( addr_p == NULL )
+    {
+        printf("addrToInteger parameter error\r\n");
+        return 0;
+    }
+    
+    unsigned char ipadr[4];
+    unsigned char temp= 0;
+    int i,j,k;
+    
+    /* convert to char[4] */
+    k=0;
+    for(i=0; i<4; i ++)
+    {
+        for(j=0; j<4; j ++)
+        {
+            if((addr_p[k] > 0x2F)&&(addr_p[k] < 0x3A))
+            {
+                temp = (temp * 10) + addr_p[k]-0x30;
+            }
+            else if((addr_p[k] == 0x20)&&(temp == 0))
+            {
+            }
+            else
+            {
+                ipadr[i]=temp;
+                temp = 0;
+                k++;
+                break;
+            }
+            k++;
+        }
+    }
+
+    int   addr  = ( (ipadr[0]<<24) | (ipadr[1]<<16) | (ipadr[2]<<8) | ipadr[3] );
+
+    return addr;
+}