--- /dev/null
+/*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 ----------------------------------- */