OSDN Git Service

*** empty log message ***
authorkoinec <>
Sun, 15 Nov 2009 05:44:05 +0000 (05:44 +0000)
committerkoinec <>
Sun, 15 Nov 2009 05:44:05 +0000 (05:44 +0000)
deamon/drd64_marshald_cmd_attach_request.c
deamon/drd64_marshald_cmd_connect.c
deamon/drd64_marshald_cmd_disconnect.c
deamon/drd64_marshald_dispatch.c
deamon/drd64_marshald_dispatch.h
deamon/drd64_marshald_msg_bootinfo.c
deamon/drd64_marshald_send_connect.c
deamon/drd64_server_recvstatus.c
deamon/drd64_server_recvstatus.h

index 072d35a..d72324d 100644 (file)
@@ -46,13 +46,14 @@ Comment:
 
 int
        Drd64_Marshald_Cmd_AttachRequest_Scn4_RecvBootInfo(
-               int             i_fds,
+               int             i_recv_id,
                Drd64_PacketHeader                                      *p_phead,
                Drd64_PacketData_AttachRequest          *p_attach,
                Drd64_Marshald_MasterInformation        *p_marshald )
 {
        int             i_wlen;
        int             i_result;
+       int             i_fds;
        Drd64_Marshald_ConnectInfo      *p_cinfo;
 
        DRD64_LOG_DEBUG("  [DEBUG]CMD: Attach Req. (Scn4:RecvBootInfo) Start");
@@ -61,6 +62,9 @@ int
                                                                        p_phead->i_connect_id );
        assert( NULL != p_cinfo );
 
+       i_fds   = Drd64_Server_RecvStatus_GetSocketID( i_recv_id );
+       assert( -1 != i_fds );
+
        /* Set Answer Data ---------*/
        p_phead->w_packettype           = DRD64_PACKETTYPE_ANSWER;
        p_attach->i_connect_id                  = p_phead->i_connect_id;
@@ -68,7 +72,7 @@ int
        i_wlen  = send( i_fds, (void *)p_phead,
                                                DRD64_PacketSize(p_phead), 0x00 );
        if( i_wlen != DRD64_PacketSize(p_phead) )
-               { return DRD64_MARSHALD_DISPATCH_RESULT_CLOSE; }
+               { return DRD64_MARSHALD_DISPATCH_RESULT_CLOSE; }        // XXX > error 
 
        DRD64_LOG_DEBUG("  [DEBUG]CMD: Attach Req. (Scn4:RecvBootInfo) Ended");
 
@@ -78,7 +82,7 @@ int
 
 int
        Drd64_Marshald_Cmd_AttachRequest_Scn2_ConnectINetMarshald(
-               int             i_fds,
+               int             i_recv_id,
                Drd64_PacketHeader      *p_phead,
                Drd64_PacketData_AttachRequest  *p_attachreq,
                Drd64_Marshald_MasterInformation        *p_marshald )
@@ -86,17 +90,17 @@ int
        int             i_result;
        Drd64_Marshald_ConnectInfo      *p_cinfo_inet;
 
-       i_result        = DRD64_MARSHALD_DISPATCH_RESULT_CLOSE;
+       i_result        = DRD64_MARSHALD_DISPATCH_RESULT_CLOSE;         // XXX > error
 
        p_cinfo_inet = Drd64_Marshald_SendCmd_Connect(
-                                                       &(p_attachreq->t_prog_addr), i_fds );
+                                                       &(p_attachreq->t_prog_addr), i_recv_id );
        if( NULL != p_cinfo_inet )      {
                i_result
                        = Drd64_Marshald_Cmd_AttachRequest_Scn3_TransAttachRequest(
-                                               i_fds, p_phead, p_attachreq, p_marshald );
+                                               i_recv_id, p_phead, p_attachreq, p_marshald );
        }
        else    {
-               Drd64_Server_RecvStatus_SetCmdStatus( i_fds,
+               Drd64_Server_RecvStatus_SetCmdStatus( i_recv_id,
                                                DRD64_CMDSTATUS_ATTACHREQ_WAITCONNECT );
 
                DRD64_LOG_DEBUG("  [DEBUG]CMD: Attach Req. (Scn2:ConnectINetMarshald) Ended");
@@ -110,7 +114,7 @@ int
 
 int
        Drd64_Marshald_Cmd_AttachRequest_Scn3_TransAttachRequest(
-               int             i_fds,
+               int             i_recv_id,
                Drd64_PacketHeader      *p_phead,
                Drd64_PacketData_AttachRequest  *p_attachreq,
                Drd64_Marshald_MasterInformation        *p_marshald )
@@ -132,7 +136,7 @@ int
                                        p_phead->i_datalen );
        if( 0 > i_err ) { return 0x02; }
 
-       Drd64_Server_RecvStatus_SetCmdStatus( i_fds,
+       Drd64_Server_RecvStatus_SetCmdStatus( i_recv_id,
                                                DRD64_CMDSTATUS_ATTACHREQ_WAITTRANS );
 
        DRD64_LOG_DEBUG("  [DEBUG]CMD: Attach Req. (Scn3:TransAttachReq.) Ended");
@@ -144,7 +148,7 @@ int
 
 int
        Drd64_Marshald_Cmd_AttachRequest_Scn1_BootDebugd(
-               int             i_fds,
+               int             i_recv_id,
                Drd64_PacketHeader                                      *p_phead,
                Drd64_PacketData_AttachRequest          *p_attach,
                Drd64_Marshald_MasterInformation        *p_marshald )
@@ -177,7 +181,7 @@ int
        snprintf( str_pid_debugd, 10, "%d", p_attach->i_prog_pid );
 
        /* r : request fd */
-       snprintf( str_request_fd, 10, "%d", i_fds );
+       snprintf( str_request_fd, 10, "%d", i_recv_id );
 
        /* m : to Debugd ConnectInfo ID */
        snprintf( str_debugd_connect_id, 10, "%d", p_cinfo_now->i_cinfo_id );
@@ -233,7 +237,7 @@ int
                p_cinfo_now->i_client_pid                       = p_cinfo_marshald->i_client_pid;
        }
 
-       Drd64_Server_RecvStatus_SetCmdStatus( i_fds,
+       Drd64_Server_RecvStatus_SetCmdStatus( i_recv_id,
                                        DRD64_CMDSTATUS_ATTACHREQ_WAITEXEC );
 
        DRD64_LOG_DEBUG("  [DEBUG]CMD: Attach Req. (Scn1:BootDebugd) Ended");
@@ -251,7 +255,7 @@ int
 
 int
        Drd64_Marshald_Cmd_AttachRequest(
-               int             i_fds,
+               int             i_recv_id,
                Drd64_PacketHeader      *p_phead,
                Drd64_PacketData_AttachRequest  *p_attachreq,
                Drd64_Marshald_MasterInformation        *p_marshald )
@@ -268,11 +272,11 @@ int
 
        i_result        = DRD64_MARSHALD_DISPATCH_RESULT_COMPLETE;
 
-       b_packet_status = Drd64_Server_RecvStatus_GetPacketStatus( i_fds );
+       b_packet_status = Drd64_Server_RecvStatus_GetPacketStatus( i_recv_id );
        if( DRD64_SERVER_RECVSTATUS_STATUS_ERROR == b_packet_status )
                { return i_result; }
 
-       i_cmd_status    = Drd64_Server_RecvStatus_GetCmdStatus( i_fds );
+       i_cmd_status    = Drd64_Server_RecvStatus_GetCmdStatus( i_recv_id );
        if( -1 == i_cmd_status )
                { return i_result; }
        
@@ -285,14 +289,14 @@ int
                /* Scenery 1 : Local Debug Started (from Local or Inet)---*/
                if( 0x00 == i_inet_flag )       {
                        i_result = Drd64_Marshald_Cmd_AttachRequest_Scn1_BootDebugd(
-                                               i_fds, p_phead, p_attachreq, p_marshald );
+                                               i_recv_id, p_phead, p_attachreq, p_marshald );
 
                }
                /* Scenery 2 : Inet Debug Started (for Trans Inet Marshald ) ---*/
                else    {
                        i_result
                                = Drd64_Marshald_Cmd_AttachRequest_Scn2_ConnectINetMarshald(
-                                               i_fds, p_phead, p_attachreq, p_marshald );
+                                               i_recv_id, p_phead, p_attachreq, p_marshald );
                }
        }
        else if( DRD64_SERVER_RECVSTATUS_STATUS_RESUME == b_packet_status )     {
@@ -302,13 +306,13 @@ int
 
                        i_result
                                = Drd64_Marshald_Cmd_AttachRequest_Scn3_TransAttachRequest(
-                                               i_fds, p_phead, p_attachreq, p_marshald );
+                                               i_recv_id, p_phead, p_attachreq, p_marshald );
                }
                /* Scenery 4 : Recv. BootInfo Cmd from Debugd ---*/
                else if( DRD64_CMDSTATUS_ATTACHREQ_WAITEXEC == i_cmd_status )   {
                        i_result
                                = Drd64_Marshald_Cmd_AttachRequest_Scn4_RecvBootInfo(
-                                               i_fds, p_phead, p_attachreq, p_marshald );
+                                               i_recv_id, p_phead, p_attachreq, p_marshald );
                }
                /* Scenery 5 : Recv. Answer Trans. Attach req. from Inet Marshald -*/
                else if( DRD64_CMDSTATUS_ATTACHREQ_WAITTRANS == i_cmd_status )  {
@@ -321,7 +325,7 @@ int
        }
 
 
-       i_result        = 0x02;         /* XXX */
+       //i_result      = 0x02;         /* XXX */
 
        
        return i_result;
index 3403cfd..6deba70 100644 (file)
@@ -75,34 +75,40 @@ int
 
 int
        Drd64_Marshald_Cmd_Connect_Server(
-               int             i_fds,
+               int             i_recv_id,
                Drd64_PacketHeader      *p_phead,
                Drd64_PacketData_Connect        *p_connect )
 {
        int                     i_wlen;
+       int                     i_fds;
        Drd64_Marshald_ConnectInfo              *p_cinfo;
+       Drd64_Server_RecvStatus                 *p_recv;
 
        DRD64_LOG_DEBUG("  [DEBUG] CMD: Connect(Server) Start");
 
+       p_recv  = Drd64_Server_RecvStatus_GetRecvStatus( i_recv_id );
+       assert( NULL != p_recv );
+       i_fds   = p_recv->i_fds_id;
+       
        /* Alloc ConnectInfo. */
        p_cinfo = Drd64_Marshald_CInfo_AllocConnectInfo();
        if( NULL == p_cinfo )
-               { return DRD64_MARSHALD_DISPATCH_RESULT_CLOSE; }
+               { return DRD64_MARSHALD_DISPATCH_RESULT_CLOSE; }        // XXX > error
 
        p_cinfo->b_cinfo_type   = DRD64_MARSHALD_CINFOTYPE_CONNECT;
        p_cinfo->i_cinfo_refcount       = 1;
 
-       p_cinfo->i_dest_socket  = -1;
+       p_cinfo->i_dest_socket                  = -1;
        p_cinfo->str_dest_addr_local[0] = '\0'; 
-       p_cinfo->i_dest_cinfo_id        = -1;
-       p_cinfo->i_src_socket   = i_fds;
+       p_cinfo->i_dest_cinfo_id                = -1;
+       p_cinfo->i_src_socket                   = i_fds;
        Drd64_Server_INetAddr_CopyInAddr(
                                &(p_cinfo->t_src_addr_inet),
                                &(p_connect->t_client_addr_inet) );
 
-       p_cinfo->i_src_cinfo_id = p_connect->i_client_cinfo_id;
-       p_cinfo->i_prog_pid             = -1;
-       p_cinfo->i_debugd_pid   = -1;
+       p_cinfo->i_src_cinfo_id                 = p_connect->i_client_cinfo_id;
+       p_cinfo->i_prog_pid                             = -1;
+       p_cinfo->i_debugd_pid                   = -1;
        Drd64_Server_INetAddr_CopyInAddr(
                                &(p_cinfo->t_client_addr_inet),
                                &(p_connect->t_client_addr_inet) );
@@ -115,7 +121,7 @@ int
 
        i_wlen  = send( i_fds, (void *)p_phead, DRD64_PacketSize(p_phead), 0x00 );
        if( i_wlen != DRD64_PacketSize(p_phead) )
-               { return DRD64_MARSHALD_DISPATCH_RESULT_CLOSE; }
+               { return DRD64_MARSHALD_DISPATCH_RESULT_CLOSE; }        // XXX > error
        
        DRD64_LOG_DEBUG("  [DEBUG] CMD: Connect(Server) Complete ");
 
@@ -125,7 +131,7 @@ int
 
 int
        Drd64_Marshald_Cmd_Connect(
-               int             i_fds,
+               int             i_recv_id,
                Drd64_PacketHeader      *p_phead,
                Drd64_PacketData_Connect        *p_connect )
 {
@@ -135,12 +141,12 @@ int
 
        if( DRD64_PACKETTYPE_ANSWER == p_phead->w_packettype )  {
                i_result        = Drd64_Marshald_Cmd_Connect_Client(
-                                                               i_fds, p_phead, p_connect );
+                                                               i_recv_id, p_phead, p_connect );
 
        }
        else    {
                i_result        = Drd64_Marshald_Cmd_Connect_Server(
-                                                               i_fds, p_phead, p_connect );
+                                                               i_recv_id, p_phead, p_connect );
        }
        
        return i_result;
index 1b1219a..e2a5940 100644 (file)
@@ -39,12 +39,18 @@ Comment:
 
 int
        Drd64_Marshald_Cmd_DisConnect(
-               int             i_fds,
+               int             i_recv_id,
                Drd64_PacketHeader      *p_phead,
                Drd64_PacketData_Connect        *p_connect )
 {
        int                     i_wlen;
+       int                     i_fds;
        Drd64_Marshald_ConnectInfo              *p_cinfo;
+       Drd64_Server_RecvStatus                 *p_recv;
+
+       p_recv  = Drd64_Server_RecvStatus_GetRecvStatus( i_recv_id );
+       assert( NULL != p_recv );
+       i_fds   = p_recv->i_fds_id;
 
        /* XXX : Check UnExit/UnDetach Process? */
 
index 4a89413..0868f33 100644 (file)
@@ -49,20 +49,46 @@ void
 }
 
 
+/* for EXTERNAL Function */
+void
+       Drd64_Marshald_Dispatch_CloseSocket(
+               int     i_fds )
+{
+       close( i_fds );
+       FD_CLR( i_fds, &fds_orig );
+       Drd64_Server_RecvStatus_FreeRecvStatus( i_fds );
+       return;
+}
+
+void
+       Drd64_Marshald_Dispatch_InitRecvStatus(
+               Drd64_Server_RecvStatus *p_recv )
+{
+       assert( NULL != p_recv );
+
+       p_recv->i_read_phase    = DRD64_SERVER_RECVSTATUS_PHASE_HEADER;
+       p_recv->b_recv_status   = DRD64_SERVER_RECVSTATUS_STATUS_READ;
+       p_recv->i_remain_bytes  = sizeof( Drd64_PacketHeader );
+       p_recv->pv_resume               = p_recv->pv_buf;
+
+       return;
+}
+
+
 int
        Drd64_Marshald_Dispatch_ExecPacket(
-               int             i_fds,
+               int             i_recv_id,
                Drd64_Server_RecvStatus *p_recv,
         Drd64_Marshald_MasterInformation *p_marshald )
 {
-       int             i_result;
+       int                                                     i_result;
        Drd64_PacketHeader                      *p_phead;
        Drd64_Server_RecvStatus         *p_recv_parent;
        void                                            *pv_data;
 
        /* Phase 1 : Init. ================================*/
        pv_data                 = NULL;
-       i_result        = DRD64_MARSHALD_DISPATCH_RESULT_CLOSE;
+       i_result        = DRD64_MARSHALD_DISPATCH_RESULT_CLOSE;         // XXX > error
 
        p_phead = (Drd64_PacketHeader *)p_recv->pv_buf;
        assert( NULL != p_phead );
@@ -74,16 +100,16 @@ int
        /* Phase 2 : Exec. Command ========================*/
        /* CMD: Connect -----------------------------------*/
        if( DRD64_COMMAND_CONNECT == p_phead->dw_command )      {
-               i_result = Drd64_Marshald_Cmd_Connect( i_fds, p_phead, pv_data );
+               i_result = Drd64_Marshald_Cmd_Connect( i_recv_id, p_phead, pv_data );
        }
        /* CMD: DisConnect --------------------------------*/
        else if( DRD64_COMMAND_DISCONNECT == p_phead->dw_command )      {
-               i_result = Drd64_Marshald_Cmd_DisConnect( i_fds, p_phead, pv_data );
+               i_result = Drd64_Marshald_Cmd_DisConnect( i_recv_id, p_phead, pv_data );
        }
        /* CMD: Attach Request  ---------------------------*/
        else if( DRD64_COMMAND_ATTACH_REQUEST == p_phead->dw_command )  {
                i_result = Drd64_Marshald_Cmd_AttachRequest(
-                                                       i_fds, p_phead, pv_data, p_marshald );
+                                                       i_recv_id, p_phead, pv_data, p_marshald );
        }
        else if( DRD64_COMMAND_DEBUG_REQUEST == p_phead->dw_command )   {
        }
@@ -93,7 +119,7 @@ int
        }
        else if( DRD64_COMMAND_DEBUGD_BOOTINFO == p_phead->dw_command ) {
                i_result = Drd64_Marshald_Msg_DebugdBootInfo(
-                                                       i_fds, p_phead, pv_data, p_marshald );
+                                                       i_recv_id, p_phead, pv_data, p_marshald );
        }
 
 
@@ -101,24 +127,30 @@ int
        if( DRD64_MARSHALD_DISPATCH_RESULT_RESTART == i_result )        {
                if( -1 < p_phead->i_resume_recvstatus_id )      {
                        p_recv_parent = Drd64_Server_RecvStatus_GetRecvStatus(
-                                                               p_phead->i_resume_recvstatus_id );
+                                                                       p_phead->i_resume_recvstatus_id );
                        assert( NULL != p_recv_parent );
 
                        p_recv_parent->b_recv_status
                                        = DRD64_SERVER_RECVSTATUS_STATUS_RESUME;
+                       printf( "rid = %d, link = %d\n", i_recv_id, p_phead->i_resume_recvstatus_id );
                }
-               i_result        = DRD64_MARSHALD_DISPATCH_RESULT_COMPLETE;
+               //i_result      = DRD64_MARSHALD_DISPATCH_RESULT_COMPLETE;
        }
        else if( DRD64_MARSHALD_DISPATCH_RESULT_POLL == i_result )      {
                p_recv->b_recv_status   = DRD64_SERVER_RECVSTATUS_STATUS_STOP;
-               i_result        = DRD64_MARSHALD_DISPATCH_RESULT_COMPLETE;
+               puts("poll");
+               //i_result      = DRD64_MARSHALD_DISPATCH_RESULT_COMPLETE;      // XXX
        }
-       else    {
-               p_recv->i_read_phase    = DRD64_SERVER_RECVSTATUS_PHASE_HEADER;
-               p_recv->b_recv_status   = DRD64_SERVER_RECVSTATUS_STATUS_READ;
-               p_recv->i_remain_bytes  = sizeof( Drd64_PacketHeader );
-               p_recv->pv_resume               = p_recv->pv_buf;
-               /* i_result     = DRD64_MARSHALD_DISPATCH_RESULT_CLOSE; */
+       /*else  {
+               Drd64_Marshald_Dispatch_InitRecvStatus( p_recv );
+               // i_result     = DRD64_MARSHALD_DISPATCH_RESULT_CLOSE; 
+       }*/
+
+       /* XXX > error */
+       if(( DRD64_MARSHALD_DISPATCH_RESULT_COMPLETE == i_result )
+                       || ( DRD64_MARSHALD_DISPATCH_RESULT_RESTART == i_result ))      {
+               Drd64_Server_RecvStatus_DeleteResumeChain( i_recv_id );
+               puts("delete");
        }
 
        return i_result;
@@ -133,8 +165,9 @@ int
         Drd64_Marshald_MasterInformation *p_marshald )
 {
        int             i_result;
-       int             i_resume_fd;
+       int             i_recv_id;
        Drd64_PacketHeader                      *p_phead;
+       Drd64_Server_RecvStatus         *p_recv_new;
 
        i_result                = 0x00;
 
@@ -176,15 +209,65 @@ int
 
        /* Check 4: Transport Packet? */
 
+       /* Push Readed Command Packet for Resume Pool */
+       i_recv_id       = Drd64_Server_RecvStatus_PushResumeChain(
+                                               i_fds, DRD64_MARSHALD_RECVSTATUS_UNITS );
+       if( 0 > i_recv_id )
+               { return DRD64_MARSHALD_DISPATCH_RESULT_CLOSE; }        // XXX > error
+
+       p_recv_new      = Drd64_Server_RecvStatus_GetRecvStatus( i_fds );
+       assert( NULL != p_recv_new );
+
+       Drd64_Marshald_Dispatch_InitRecvStatus( p_recv_new );
+       printf("Resume Add: %d\n", i_recv_id );
+       
+       
        /* Exec Packet by Command-Code */
        i_result = Drd64_Marshald_Dispatch_ExecPacket(
-                                       i_fds, p_recv, p_marshald );
+                                               i_recv_id, p_recv, p_marshald );
 
        return i_result;
 }
 
 
 int
+       Drd64_Marshald_Dispatch_ExecResumeRecvStatus(
+               Drd64_Marshald_MasterInformation *p_marshald )
+{
+       int                                                     i_result;
+       Drd64_Server_RecvStatus         *p_recv;
+
+       p_recv  = Drd64_Server_RecvStatus_GetResumeStart();
+       while( NULL != p_recv ) {
+               if( DRD64_SERVER_RECVSTATUS_STATUS_RESUME
+                                                       == p_recv->b_recv_status )      {
+
+                       puts("resume exec");
+                       i_result = Drd64_Marshald_Dispatch_ExecPacket(
+                                                       p_recv->i_recvstatus_id, p_recv, p_marshald );
+
+                       /* XXX : support for disconnect (CLOSE) */
+                       /* 0x00 = Judge 1 : Disconnect ( Others Packet ) */
+                       if( DRD64_MARSHALD_DISPATCH_RESULT_CLOSE == i_result )  {
+                               Drd64_Marshald_Dispatch_CloseSocket( p_recv->i_fds_id );
+                       }
+                       else if( DRD64_MARSHALD_DISPATCH_RESULT_RESTART == i_result )   {
+                               p_recv  = NULL;
+                       }
+               }
+                                       
+               if( NULL != p_recv )    {
+                       p_recv = (Drd64_Server_RecvStatus *)p_recv->pv_recv_next;
+               }
+               else    {
+                       p_recv  = Drd64_Server_RecvStatus_GetResumeStart();
+               }
+       }
+
+       return 0x00;
+}
+
+int
     Drd64_Marshald_Dispatch_Polling(
         Drd64_Marshald_MasterInformation *p_marshald )
 {
@@ -194,13 +277,15 @@ int
        int             i_result;
        int             i_err;
        int             i_pid;
-       int             i_on = 0;
+       //int           i_on = 0;
+       int             i_resume_flag;
        int     i_socket_new;
        int             i_selects_base;
        int     i_selects_max;
        int             i_selects_last;
        int             i_socket_server;
        Drd64_Server_RecvStatus         *p_recv;
+       Drd64_Server_RecvStatus         *p_recv_resume;
 
        FD_ZERO( &fds_orig );
        FD_SET( p_marshald->i_socket_local, &fds_orig );
@@ -238,10 +323,12 @@ int
                                                        i_socket_new, DRD64_MARSHALD_RECVSTATUS_UNITS );
 
                                if( NULL != p_recv )    {
-                                       p_recv->i_read_phase
+                                       Drd64_Marshald_Dispatch_InitRecvStatus( p_recv );
+               
+                                       /*p_recv->i_read_phase
                                                                        = DRD64_SERVER_RECVSTATUS_PHASE_HEADER;
                                        p_recv->i_remain_bytes  = sizeof( Drd64_PacketHeader );
-                                       p_recv->pv_resume               = p_recv->pv_buf;
+                                       p_recv->pv_resume               = p_recv->pv_buf;*/
                                }
                                /* XXX : Error Proc. 
                                else {
@@ -252,6 +339,7 @@ int
                        } */
                }
                else    {
+                       i_resume_flag   = 0x00; 
                        for( i_cnt = 0; i_cnt < i_selects_max; i_cnt++ )    {
 
                                /* Drd64 Clinet & Marshald => No Judge */
@@ -277,27 +365,35 @@ int
 
                                        /* 0x00 = Judge 1 : Disconnect ( Others Packet ) */
                                        if( DRD64_MARSHALD_DISPATCH_RESULT_CLOSE == i_result )  {
-                                               close( i_cnt );
+                                               Drd64_Marshald_Dispatch_CloseSocket( i_cnt );
+                                               /*close( i_cnt );
                                                FD_CLR( i_cnt, &fds_orig );
-                                               Drd64_Server_RecvStatus_FreeRecvStatus( i_cnt );
+                                               Drd64_Server_RecvStatus_FreeRecvStatus( i_cnt );*/
+                                       }
+                                       else if( DRD64_MARSHALD_DISPATCH_RESULT_RESTART
+                                                                                                               == i_result )   {
+                                               i_resume_flag   = 0x01;
+                                               puts("setflag");
                                        }
                                        /* 0x01 = Judge 1 : Reading Next */
                                }
 
-                               /* Check TimeOut & Restart RecvStat */
-                               if( DRD64_SERVER_RECVSTATUS_STATUS_RESUME
+                               /* Check TimeOut & Restart RecvStat */  // XXX : timeout
+                               /*if( DRD64_SERVER_RECVSTATUS_STATUS_RESUME
                                                                                == p_recv->b_recv_status )      {
-                                       /* Judge Packet */
                                        i_result = Drd64_Marshald_Dispatch_ExecPacket(
                                                                        i_cnt, p_recv, &drd64_marshald_info );
-                                       /* 0x00 = Judge 1 : Disconnect ( Others Packet ) */
                                        if( DRD64_MARSHALD_DISPATCH_RESULT_CLOSE == i_result )  {
-                                               close( i_cnt );
-                                               FD_CLR( i_cnt, &fds_orig );
-                                               Drd64_Server_RecvStatus_FreeRecvStatus( i_cnt );
+                                               Drd64_Marshald_Dispatch_CloseSocket( i_cnt );
                                        }
-                               }
-                               
+                               }*/
+                       }
+
+                       /* Check Restart Packet (RecvStatus) */
+                       if( 0x00 != i_resume_flag )             {
+                               puts("execflag");
+                               Drd64_Marshald_Dispatch_ExecResumeRecvStatus(
+                                                                                       &drd64_marshald_info );
                        }
 
                        /* Set Max fd */
index 0b0e335..0d0a93a 100644 (file)
@@ -43,6 +43,7 @@ Comment:
 #define        DRD64_MARSHALD_DISPATCH_RESULT_COMPLETE         0x02
 #define        DRD64_MARSHALD_DISPATCH_RESULT_RESTART          0x03
 #define        DRD64_MARSHALD_DISPATCH_RESULT_POLL                     0x04
+#define        DRD64_MARSHALD_DISPATCH_RESULT_DISCONNECT       0x00    // XXX
 
 #endif /* DRD64_HEADER_XXX */
 
index 7c79b40..c267d1a 100644 (file)
@@ -39,11 +39,11 @@ Comment:
 
 int
        Drd64_Marshald_Msg_DebugdBootInfo(
-               int                                                     i_fds,
+               int                                                     i_recv_id,
                Drd64_PacketHeader                      *p_phead,
                Drd64_PacketData_Connect        *p_connect )
 {
-       int             i_result;
+       /* int          i_result; */
 
        /* NO Proc. */
        
index 0be61cc..7ed3d86 100644 (file)
@@ -40,7 +40,7 @@ Comment:
 Drd64_Marshald_ConnectInfo *
        Drd64_Marshald_SendCmd_Connect(
                struct  in_addr *p_addr_dest,
-               int             i_request_fd )
+               int             i_recv_id )
 {
        int                                                     i_err;
        int                                                     i_wlen;
@@ -52,13 +52,12 @@ Drd64_Marshald_ConnectInfo *
 
 
        /* Phase 1 : Check Exist Same-Connection */
-       p_cinfo = Drd64_Marshald_SearchINetConnection( &p_addr_dest );
+       p_cinfo = Drd64_Marshald_SearchINetConnection( p_addr_dest );
        if( NULL != p_cinfo )   {
                p_cinfo->i_cinfo_refcount++;
                
                return  p_cinfo;
        }
-       
 
        /* Phase 2 : Init & Set Packet Data ----------*/
        p_cinfo = Drd64_Marshald_CInfo_AllocConnectInfo();
@@ -73,7 +72,7 @@ Drd64_Marshald_ConnectInfo *
        p_phead->dw_command             = DRD64_COMMAND_CONNECT;
        p_phead->w_packettype   = DRD64_PACKETTYPE_REQUEST;
        p_phead->i_datalen              = sizeof( Drd64_PacketData_Connect );
-       p_phead->i_resume_recvstatus_id = i_request_fd;
+       p_phead->i_resume_recvstatus_id = i_recv_id;
        p_phead->i_result               = 0x00;
        p_phead->i_error                = 0x00;
 
@@ -94,21 +93,21 @@ Drd64_Marshald_ConnectInfo *
 
        p_recv = Drd64_Server_RecvStatus_AllocRecvStatus(
                                        i_socket_inet, DRD64_MARSHALD_RECVSTATUS_UNITS );
-       if( NULL == p_recv )    { return 0x02; }
+       if( NULL == p_recv )    { return NULL; }
 
        /* Phase 4 : Send Packet to INet Marshald -----*/
        i_wlen  = send( i_socket_inet, (void *)p_phead,
                                                                DRD64_PacketSize(p_phead), 0x00 );
        if( i_wlen != DRD64_PacketSize(p_phead) )       {
-               return 0x01
+               return NULL
        } 
 
        Drd64_Marshald_Dispatch_SetFD( i_socket_inet );
+       Drd64_Marshald_Dispatch_InitRecvStatus( p_recv );
 
-       p_recv->i_read_phase = DRD64_SERVER_RECVSTATUS_PHASE_HEADER;
+       /*p_recv->i_read_phase = DRD64_SERVER_RECVSTATUS_PHASE_HEADER;
        p_recv->i_remain_bytes  = sizeof( Drd64_PacketHeader );
-       p_recv->pv_resume       = p_recv->pv_buf;
-
+       p_recv->pv_resume       = p_recv->pv_buf;*/
 
        p_cinfo->b_cinfo_type                   = DRD64_MARSHALD_CINFOTYPE_CLIENT;
        p_cinfo->i_cinfo_refcount               = 1;
index 9116d2c..b39a02f 100644 (file)
@@ -259,20 +259,23 @@ void
 
 
 EXTERN_SERVER_RECVSTATUS
-Drd64_Server_RecvStatus *
+int
        Drd64_Server_RecvStatus_PushResumeChain(
                int             i_fds,
                int             i_alloc_units )
 {
        int             i_cnt;
+       int             i_recv_id;
        Drd64_Server_RecvStatus         *p_recv_self;
        Drd64_Server_RecvStatus         *p_recv_new;
        Drd64_Server_RecvStatus         *p_recv_before;
 
+       i_recv_id       = -1;
+
        /* Get Self RecvStatus --- */
        p_recv_self     = *(gpp_recvstat + i_fds);
        if( NULL == p_recv_self )       {
-               return NULL;
+               return -1;
        }
 
        /* Get New RecvStatus --- */
@@ -280,7 +283,7 @@ Drd64_Server_RecvStatus *
                = Drd64_Server_RecvStatus_AllocRecvStatus(
                                        i_fds, i_alloc_units );
        if( NULL == p_recv_new )        {
-               return NULL;
+               return -2;
        }
 
        /* Push & Chain RecvStatus ---*/
@@ -308,13 +311,14 @@ Drd64_Server_RecvStatus *
 
        }
 
+       i_recv_id       = i_cnt;
        p_recv_self->i_recvstatus_id    = i_cnt;
        *(gpp_recvstat + p_recv_self->i_recvstatus_id)  = p_recv_self;
        if( gi_recv_resume_max == i_cnt )       {
                gi_recv_resume_max++;
        }
        
-       return p_recv_self;
+       return i_recv_id;
 }
 
 
@@ -359,26 +363,40 @@ int
        p_recv_self->i_recvstatus_id    = -1;
        p_recv_self->i_fds_id                   = -1;
 
-       return NULL;
+       return 0x00;
 }
 
 
 EXTERN_SERVER_RECVSTATUS
 Drd64_Server_RecvStatus *
        Drd64_Server_RecvStatus_GetRecvStatus(
-               int             i_fds )
+               int             i_recv_id )
+{
+       return *(gpp_recvstat + i_recv_id);
+}
+
+
+EXTERN_SERVER_RECVSTATUS
+int
+       Drd64_Server_RecvStatus_GetSocketID(
+               int             i_recv_id )
 {
-       return *(gpp_recvstat + i_fds);
+       Drd64_Server_RecvStatus         *p_recv;
+       p_recv  = *(gpp_recvstat + i_recv_id);
+       
+       if( NULL == p_recv )    { return -1; }
+
+       return p_recv->i_fds_id;
 }
 
 
 EXTERN_SERVER_RECVSTATUS
 int
        Drd64_Server_RecvStatus_GetPacketStatus(
-               int             i_fds )
+               int             i_recv_id )
 {
        Drd64_Server_RecvStatus         *p_recv;
-       p_recv  = *(gpp_recvstat + i_fds);
+       p_recv  = *(gpp_recvstat + i_recv_id);
        
        if( NULL == p_recv )    { return -1; }
 
@@ -389,10 +407,10 @@ int
 EXTERN_SERVER_RECVSTATUS
 int
        Drd64_Server_RecvStatus_GetCmdStatus(
-               int             i_fds )
+               int             i_recv_id )
 {
        Drd64_Server_RecvStatus         *p_recv;
-       p_recv  = *(gpp_recvstat + i_fds);
+       p_recv  = *(gpp_recvstat + i_recv_id);
        
        if( NULL == p_recv )    { return -1; }
 
@@ -403,11 +421,11 @@ int
 EXTERN_SERVER_RECVSTATUS
 int
        Drd64_Server_RecvStatus_SetCmdStatus(
-               int             i_fds,
+               int             i_recv_id,
                int             i_command_status )
 {
        Drd64_Server_RecvStatus         *p_recv;
-       p_recv  = *(gpp_recvstat + i_fds);
+       p_recv  = *(gpp_recvstat + i_recv_id);
        
        if( NULL == p_recv )    { return -1; }
 
@@ -425,4 +443,13 @@ int
        return gi_recvstat_max;
 }
 
+
+EXTERN_SERVER_RECVSTATUS
+Drd64_Server_RecvStatus *
+       Drd64_Server_RecvStatus_GetResumeStart(
+               void )
+{
+       return gp_recv_resume_start;
+}
+
 /* EOF of drd64_.c ----------------------------------- */
index be48800..3d94075 100644 (file)
@@ -94,7 +94,7 @@ EXTERN_SERVER_RECVSTATUS
 
 
 EXTERN_SERVER_RECVSTATUS
-       Drd64_Server_RecvStatus *
+       int     
                Drd64_Server_RecvStatus_PushResumeChain(
                        int     i_fds,
                        int     i_alloc_units );
@@ -107,22 +107,27 @@ EXTERN_SERVER_RECVSTATUS
 EXTERN_SERVER_RECVSTATUS
        Drd64_Server_RecvStatus *
                Drd64_Server_RecvStatus_GetRecvStatus(
-                       int     i_fds );
+                       int     i_recv_id );
+
+EXTERN_SERVER_RECVSTATUS
+       int
+               Drd64_Server_RecvStatus_GetSocketID(
+                       int     i_recv_id );
 
 EXTERN_SERVER_RECVSTATUS
        int
                Drd64_Server_RecvStatus_GetPacketStatus(
-               int     i_fds );
+               int     i_recv_id );
 
 EXTERN_SERVER_RECVSTATUS
        int
        Drd64_Server_RecvStatus_GetCmdStatus(
-               int     i_fds );
+               int     i_recv_id );
 
 EXTERN_SERVER_RECVSTATUS
        int
        Drd64_Server_RecvStatus_SetCmdStatus(
-               int     i_fds,
+               int     i_recv_id,
                int     i_packet_status );
 
 
@@ -131,6 +136,11 @@ EXTERN_SERVER_RECVSTATUS
                Drd64_Server_RecvStatus_GetRecvStatMax(
                        void );
 
+EXTERN_SERVER_RECVSTATUS
+       Drd64_Server_RecvStatus *
+               Drd64_Server_RecvStatus_GetResumeStart(
+                       void );
+
 
 #endif /* DRD64_HEADER_XXX */