OSDN Git Service

Init.
authorkoinec <>
Sun, 7 Jun 2009 06:17:37 +0000 (06:17 +0000)
committerkoinec <>
Sun, 7 Jun 2009 06:17:37 +0000 (06:17 +0000)
deamon/drd64_marshald_cmd_attach_request.c [new file with mode: 0644]

diff --git a/deamon/drd64_marshald_cmd_attach_request.c b/deamon/drd64_marshald_cmd_attach_request.c
new file mode 100644 (file)
index 0000000..8627071
--- /dev/null
@@ -0,0 +1,170 @@
+/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
+
+                         D r . D e a m o n  6 4
+                        for INTEL64(R), AMD64(R)
+       
+   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
+
+/* File Info -----------------------------------------------------------
+File: drd64_.c
+Function: 
+Comment: 
+----------------------------------------------------------------------*/
+
+#include"drd64_marshald.h"
+
+int
+       Drd64_Marshald_Cmd_AttachRequest_Local2Local(
+               int             i_fds,
+               Drd64_PacketHeader      *p_phead,
+               Drd64_PacketData_AttachRequest  *p_attach,
+               Drd64_Marshald_MasterInformation        *p_marshald )
+{
+       Drd64_Marshald_ConnectInfo              *p_cinfo_now;
+       Drd64_Marshald_ConnectInfo              *p_cinfo_marshald;
+       char                                                    str_sockname[256];
+       char    str_pid_debugd[10];
+       int             i_pid_debugd;
+
+
+       /* Phase 0 : Init */
+       p_cinfo_now     = Drd64_Marshald_CInfo_AllocConnectInfo();
+       if( NULL == p_cinfo_now )
+               { return 0x00; }
+
+       p_cinfo_marshald
+               = Drd64_Marshald_GetConnectInfo( p_phead->i_connect_id );
+
+       /* Phase 1 : Generate Debugd Param */
+       /* n : socketname(PF_UNIX) */
+       strcpy( str_sockname, "/tmp/tmpdrd64debugd_XXXXXX.socket" );
+       if( NULL == mktemp( str_sockname ))     { return 0x01; }
+       puts( str_sockname );
+
+       /* a : attach pid => p_attach->i_prog_pid */
+       snprintf( str_pid_debugd, 10, "%d", p_attach->i_prog_pid );
+
+       /* XXX c : coredump file */
+
+
+       /* Phase 2 : Exec debugd */
+       i_pid_debugd    = fork();
+       /* fork error */
+       if( 0 > i_pid_debugd )  {
+               return 0x02;
+       }
+       /* child Proc. */
+       else if( 0 == i_pid_debugd )    {
+               /* XXX */
+               execl("drd64_debugd", "-n", str_sockname, "-a", str_pid_debugd, NULL );
+               exit( 0 );
+       }
+
+       /* Phase 3 : Alloc & Set Connect Info. */
+
+       p_cinfo_now->i_dest_socket                      = -1;
+       p_cinfo_now->str_dest_addr_local[0]     = '\0';         // ***
+       Drd64_Server_INetAddr_SetInAddr_LocalHost(
+                                                       &(p_cinfo_now->t_dest_addr_inet) );
+       p_cinfo_now->i_dest_cinfo_id            = -1;
+
+       p_cinfo_now->i_src_socket                       = p_cinfo_marshald->i_src_socket;
+       Drd64_Server_INetAddr_CopyInAddr(
+                               &(p_cinfo_now->t_src_addr_inet),
+                               &(p_cinfo_marshald->t_client_addr_inet) );
+       p_cinfo_now->i_src_cinfo_id                     = p_phead->i_connect_id;
+
+       Drd64_Server_INetAddr_SetInAddr_LocalHost(
+                                                       &(p_cinfo_now->t_prog_addr_inet) );
+       Drd64_Server_INetAddr_CopyInAddr(
+                               &(p_cinfo_now->t_prog_addr_inet),
+                               &(p_attach->t_prog_addr) );
+       p_cinfo_now->i_prog_pid                         = p_attach->i_prog_pid;
+       p_cinfo_now->i_debugd_pid                       = i_pid_debugd;
+       Drd64_Server_INetAddr_CopyInAddr(
+                               &(p_cinfo_now->t_client_addr_inet),
+                               &(p_cinfo_marshald->t_client_addr_inet) );
+       p_cinfo_now->i_client_pid                       = p_cinfo_marshald->i_client_pid;
+
+
+       /* Assemble Answer Packet */
+       /* Send Answer Packet */
+       /* Alloc ConnectInfo. */
+
+       /* Set Answer Data ---------*/
+/*    p_connect->i_connect_id          = p_cinfo_now->i_cinfo_id;
+    p_connect->i_marshald_pid  = getpid();
+
+       i_wlen  = send( i_fds, (void *)p_phead, DRD64_PacketSize(p_phead), 0x00 );
+       
+       if( i_wlen != DRD64_PacketSize(p_phead) )       {
+               return 0x00;
+       }
+*/
+       return 0x00;
+}
+
+
+int
+       Drd64_Marshald_Cmd_AttachRequest(
+               int             i_fds,
+               Drd64_PacketHeader      *p_phead,
+               Drd64_PacketData_AttachRequest  *p_attachreq,
+               Drd64_Marshald_MasterInformation        *p_marshald )
+{
+       int                     i_wlen;
+       int                     i_err;
+       Drd64_Marshald_ConnectInfo              *p_cinfo;
+
+       /* INet => Local */
+       if( DRD64_PACKETTYPE_TRANSPORT == p_phead->w_packettype )       {
+               /* Generate Debugd Param */
+               /* Exec debugd */
+               /* Assemble Answer Packet */
+               /* Send Answer Packet */
+       }
+       else    {
+               i_err   = Drd64_Server_INetAddr_CmpInAddr(
+                                                       &(p_attachreq->t_prog_addr),
+                                                       &(p_marshald->t_marshald_addr) );
+               /* Local => Local : Boot Debugd */
+               if( 0x00 == i_err )             {
+                       Drd64_Marshald_Cmd_AttachRequest_Local2Local(
+                                               i_fds, p_phead, p_attachreq, p_marshald );
+               }
+               /* Local => INet marshald */
+               else    {
+
+
+               }
+       }
+
+       
+       return 0x02;
+}
+
+
+/* EOF of drd64_.c ----------------------------------- */