OSDN Git Service

*** empty log message ***
authorkoinec <>
Sat, 12 Dec 2009 13:18:13 +0000 (13:18 +0000)
committerkoinec <>
Sat, 12 Dec 2009 13:18:13 +0000 (13:18 +0000)
deamon/drd64_debugd.h
deamon/drd64_debugd_dispatch.c
drdrv1.c

index 59910e2..c1c6228 100644 (file)
@@ -62,6 +62,7 @@ Comment:
 #include"../include/drd64_packet.h"
 #include"drd64_server_log.h"
 #include"drd64_server_debuglog.h"
+#include"drd64_server_recvstatus.h"
 #include"drd64_debugd_info.h"
 #include"drd64_debugd_dispatch.h"
 #include"drd64_debugd_debug.h"
index 0081e15..d49bf06 100644 (file)
@@ -35,25 +35,60 @@ Comment:
 ----------------------------------------------------------------------*/
 
 #include"drd64_debugd.h"
-#include"drd64_debugd_info.h"
-#include"drd64_server_recvstatus.h"
 
-static fd_set  fds_orig;
+static fd_set  g_fds_orig;
 
 
 void
        Drd64_Debugd_Dispatch_CloseSocket(
                int             i_fds )
 {
+       Drd64_Server_RecvStatus         *p_recv;
+
+       p_recv  = Drd64_Server_RecvStatus_GetRecvStatus( i_fds );
+       assert( NULL != p_recv );
+
        close( i_fds );
-       FD_CLR( i_fds, &fds_orig );
+       FD_CLR( i_fds, &g_fds_orig );
+       Drd64_Server_RecvStatus_DeleteSocketsChain( p_recv );
        Drd64_Server_RecvStatus_CloseRecvStatus( i_fds );
        DRD64_DEBUG_PRINT("CloseSocket",i_fds,"errono",errno,NULL,0);
+
        return;
 }
 
 
 int
+       Drd64_Debugd_Dispatch_OpenSocket(
+               int i_socket_server )
+{
+       int             i_socket_new;
+       Drd64_Server_RecvStatus         *p_recv;
+
+       i_socket_new    = accept( i_socket_server, NULL, NULL );
+       DRD64_DEBUG_SYSCALL("accept(New Comm.)",i_socket_new,errno);
+
+       if( -1 == i_socket_new )        {
+               return -1;
+       }
+
+       FD_SET( i_socket_new, &g_fds_orig );
+
+       p_recv = Drd64_Server_RecvStatus_AllocRecvStatus(
+                                       i_socket_new, DRD64_DEBUGD_RECVSTATUS_UNITS );
+
+       if( NULL == p_recv )    {
+               return -2;
+       }
+
+       Drd64_Server_RecvStatus_InitRecvStatus( p_recv, i_socket_new );
+       Drd64_Server_RecvStatus_AddSocketsChain( p_recv );
+
+       return  i_socket_new;
+}
+
+
+int
        Drd64_Debugd_Dispatch_ExecPacket(
                int             i_recv_id,
                Drd64_Server_RecvStatus *p_recv,
@@ -160,6 +195,7 @@ int
 
 
        /* Push Readed Command Packet for Resume Pool */
+       Drd64_Server_RecvStatus_DeleteSocketsChain( p_recv );
        i_recv_id       = Drd64_Server_RecvStatus_PushResumeChain(
                                        i_fds, DRD64_DEBUGD_RECVSTATUS_UNITS );
        if( 0 > i_recv_id )
@@ -169,6 +205,7 @@ int
        assert( NULL != p_recv_new );
 
        Drd64_Server_RecvStatus_InitRecvStatus( p_recv_new, p_recv->i_fds_id );
+       Drd64_Server_RecvStatus_AddSocketsChain( p_recv_new );
 
        /* Exec Packet by Command-Code */
        i_result = Drd64_Debugd_Dispatch_ExecPacket( i_recv_id, p_recv, p_debugd );
@@ -215,11 +252,13 @@ int
         Drd64_Debugd_MasterInformation *p_debugd )
 {
        fd_set  fds_now;
-       int     i_cnt;
+       //int     i_cnt;
+       int             i_socket;
        int             i_result;
        int             i_err;
        int             i_pid;
-       int     i_socket_new;
+       int             i_selects;
+       //int     i_socket_new;
        int             i_selects_base;
        int     i_selects_max;
        int             i_selects_last;
@@ -227,8 +266,8 @@ int
        Drd64_Server_RecvStatus         *p_recv;
        struct  timeval         tm_val;
 
-       FD_ZERO( &fds_orig );
-       FD_SET( p_debugd->i_socket_debugd, &fds_orig );
+       FD_ZERO( &g_fds_orig );
+       FD_SET( p_debugd->i_socket_debugd, &g_fds_orig );
 
        i_selects_base = p_debugd->i_socket_debugd + 1;
        i_selects_max = i_selects_base;
@@ -238,101 +277,57 @@ int
 
        while( 1 )  {
                /* Phase 1: Packet & Signal Polling */
-               memcpy( &fds_now, &fds_orig, sizeof( struct fd_set ) );
-               select( i_selects_max, &fds_now, NULL, NULL, &tm_val );
+               memcpy( &fds_now, &g_fds_orig, sizeof( struct fd_set ) );
+               i_selects       = select( i_selects_max, &fds_now, NULL, NULL, &tm_val );
        
                /* Phase 2: Receive Packet */
-               /* from Client */
-               /*if( -1 != p_debugd->i_socket_client ) {
-                       if( FD_ISSET( p_debugd->i_socket_client, &fds_now ) )   {
-       
+               if( 0 < i_selects )     {
+                       /* Server Socket from Local( Client or Marshald ) */
+                       if( FD_ISSET( p_debugd->i_socket_debugd, &fds_now ) )  {
+                               Drd64_Debugd_Dispatch_OpenSocket(
+                                                                       p_debugd->i_socket_debugd );
+                i_selects--;
                        }
-               }*/
-               /* from New Packet */
-               if( FD_ISSET( p_debugd->i_socket_debugd, &fds_now ) )  {
-                       i_socket_new    = accept( p_debugd->i_socket_debugd, NULL, NULL );
-                       DRD64_DEBUG_SYSCALL("accept(New Comm.)",i_socket_new,errno);
-
-                       if( -1 != i_socket_new )    {
-                               // XXX ?
-                               if( i_socket_new >= i_selects_max )
-                                       { i_selects_max = i_socket_new + 1; } 
-
-                               FD_SET( i_socket_new, &fds_orig );
 
-                               p_recv = Drd64_Server_RecvStatus_AllocRecvStatus(
-                                                       i_socket_new, DRD64_DEBUGD_RECVSTATUS_UNITS );
-
-                               if( NULL != p_recv )
-                                       { Drd64_Server_RecvStatus_InitRecvStatus(
-                                                                                       p_recv, i_socket_new ); }
-
-                               /* XXX : Error Proc. 
-                               else {
-                               } */
-                       }
-                       /* XXX : Error Proc. 
-                       else {
-                       } */
-               }
-               /* Exist/Resume Packet Proc. & Timer Check */
-               else    {
                        i_resume_flag   = 0x00;
-                       for( i_cnt = 0; i_cnt < i_selects_max; i_cnt++ )    {
-                               /* Drd64 Clinet & Marshald => No Judge */
-                               if(( i_cnt == p_debugd->i_socket_debugd ) ||
-                                               ( i_cnt == p_debugd->i_socket_client ))
-                                       { continue; }
+                       p_recv  = Drd64_Server_RecvStatus_GetSocketsChainStart();
+                       while(( NULL != p_recv ) && ( 0 < i_selects ))  {
+                               
+                               i_socket        = p_recv->i_fds_id;
 
-                               p_recv  = Drd64_Server_RecvStatus_GetRecvStatus( i_cnt );
-                               if( NULL == p_recv )    { continue; }
-
-                               if( FD_ISSET( i_cnt, &fds_now ) )       {
+                               if( FD_ISSET( i_socket, &fds_now ) )    {
                                        /* Read */
                                        i_err = Drd64_Server_RecvSocket_SocketRead_Cert(
-                                                                       i_cnt, &i_pid );
-                                       DRD64_DEBUG_PRINT("SocketRead",i_err,"FD",i_cnt,"SrcPID",i_pid);
+                                                                                                       i_socket, &i_pid );
+                                       DRD64_DEBUG_PRINT("SocketRead",i_err,"FD",
+                                                                                       i_socket,"SrcPID",i_pid);
+                                       i_selects--;
 
                                        /* Judge Packet */
                                        i_result = Drd64_Debugd_Dispatch_JudgePacket(
-                                                                               i_cnt, i_err, p_recv, p_debugd );
+                                                                               i_socket, i_err, p_recv, p_debugd );
 
                                        /* 0x00 = Judge 1 : Disconnect ( Others Packet ) */
                                        if( DRD64_DEBUGD_DISPATCH_RESULT_CLOSE == i_result )
-                                               { Drd64_Debugd_Dispatch_CloseSocket( i_cnt ); }
+                                               { Drd64_Debugd_Dispatch_CloseSocket( i_socket ); }
                                        /* 0x03 = Judge 2 : Restart Flag ON */
                                        else if( DRD64_DEBUGD_DISPATCH_RESULT_RESTART == i_result )
                                                { i_resume_flag = 0x01; }
                                        /* 0x05 = Judge 3 : from Clinet Connect Request */
                                        else if( DRD64_DEBUGD_DISPATCH_RESULT_SETCLIENT
                                                                                                        == i_result )
-                                               { p_debugd->i_socket_client = i_cnt; }
+                                               { p_debugd->i_socket_client = i_socket; }
                                        /* 0x01 = Judge 1 : Reading Next */
                                }
 
-                               /* Check Resume Packet */
-                               /*if( DRD64_SERVER_RECVSTATUS_STATUS_RESUME
-                                                                       == p_recv->b_recv_status )      {
-                                       i_result = Drd64_Debugd_Dispatch_ExecPacket(
-                                                                                       i_cnt, p_recv, p_debugd );
-
-                                       // 0x00 = Judge 1 : Disconnect ( Others Packet ) 
-                                       if( DRD64_DEBUGD_DISPATCH_RESULT_CLOSE == i_result )    {
-                                               close( i_cnt );
-                                               FD_CLR( i_cnt, &fds_orig );
-                                               Drd64_Server_RecvStatus_FreeRecvStatus( i_cnt );
-                                       }
-                                       // 0x05 = Judge 2 : from Clinet Connect Request 
-                                       else if( DRD64_DEBUGD_DISPATCH_RESULT_SETCLIENT
-                                                                                                       == i_result )           {
-                                               p_debugd->i_socket_client = i_cnt;
-                                       }
-                               }*/
+                               p_recv  = (Drd64_Server_RecvStatus *)p_recv->pv_recv_next;
                        }
-
+                       
+                       /* Check Restart Packet (RecvStatus) */
                        if( 0x00 != i_resume_flag )
                                { Drd64_Debugd_Dispatch_ExecResumeRecvStatus( p_debugd ); }
 
+                       /* Set Max fd */
                        i_selects_last  = Drd64_Server_RecvStatus_GetRecvStatMax();
                        if( i_selects_last > i_selects_base )
                                { i_selects_max = i_selects_last; }
index 0a3ff3e..d06e304 100644 (file)
--- a/drdrv1.c
+++ b/drdrv1.c
@@ -44,9 +44,10 @@ int
                char *argv[] )
 {
        int             i_target_pid;
+       int             i_err;
        
        if( 2 > argc )  {
-               puts(" drd64 [Target PID]");
+               puts(" drd64 [Target PID] <Connect Server Addr.>");
                return 0x00;
        }
 
@@ -56,8 +57,12 @@ int
        Drd64_LibDrd64_InitSystem();
        Drd64_LibDrd64_Cmd_Connect();
 
-       Drd64_LibDrd64_Cmd_Attach( i_target_pid, "localhost" );
-       //Drd64_LibDrd64_Cmd_Attach( i_target_pid, "dev64.koinec.jp" );
+       if( 2 == argc )         {
+               Drd64_LibDrd64_Cmd_Attach( i_target_pid, "localhost" );
+       }
+       else if ( 2 < argc )    {
+               Drd64_LibDrd64_Cmd_Attach( i_target_pid, argv[2] );
+       }
 
        sleep(2);
        Drd64_LibDrd64_Cmd_DisConecct();