#define DRD64_MARSHALD_CINFOTYPE_DEBUG 0x02
#define DRD64_MARSHALD_CINFOTYPE_CLIENT 0x03
+#define DRD64_MARSHALD_CINFOSTATUS_READ 0x00
+#define DRD64_MARSHALD_CINFOSTATUS_CONNECT 0x01
+#define DRD64_MARSHALD_CINFOSTATUS_POLL 0x02
+
typedef struct {
int i_cinfo_id;
Byte b_cinfo_type;
int i_cinfo_refcount;
+ Byte b_cinfo_status;
/* Section 2 : Connection Info. ==============*/
/* Destination Info. */
#include"drd64_marshald.h"
int
- Drd64_Marshald_Cmd_AttachRequest_toINet(
+ Drd64_Marshald_Cmd_AttachRequest_toINet_Result(
+ int i_fds,
+ Drd64_PacketHeader *p_phead,
+ Drd64_PacketData_AttachRequest *p_attachreq,
+ Drd64_Marshald_MasterInformation *p_marshald )
+{
+}
+
+
+int
+ Drd64_Marshald_Cmd_AttachRequest_toINet_Request(
int i_fds,
Drd64_PacketHeader *p_phead,
Drd64_PacketData_AttachRequest *p_attachreq,
{
int i_err;
Drd64_Marshald_ConnectInfo *p_cinfo;
+ Drd64_Marshald_ConnectInfo *p_cinfo_self;
+ Drd64_Marshald_ConnectInfo *p_cinfo_inet;
/* Phase 0 : Init ----------------------------*/
- /* Phase 1 : Connect INet-Marshald -----------*/
+ p_cinfo_self = Drd64_Marshald_GetConnectInfo( i_fds );
+ assert( NULL != p_cinfo_self );
+
+ p_cinfo_inet = Drd64_Marshald_SendCmd_Connect( &(p_attachreq->t_prog_addr) );
+ if( NULL == p_cinfo_inet ) {
+ p_cinfo_self->b_cinfo_status
+ = DRD64_MARSHALD_CINFOSTATUS_CONNECT;
+ return 0x00;
+ }
+
+
+ if( DRD64_MARSHALD_CINFOSTATUS_READ == p_cinfo_self ) {
+ /* */
+
+ p_cinfo_inet = Drd64_Marshald_SearchINetConnection(
+ &(p_attachreq->t_prog_addr) );
+ if( NULL != p_cinfo_inet ) {
+ p_cinfo_self->b_cinfo_status
+ = DRD64_MARSHALD_CINFOSTATUS_POLL;
+ }
+ else {
+ p_cinfo_self->b_cinfo_status
+ = DRD64_MARSHALD_CINFOSTATUS_CONNECT;
+ p_cinfo = Drd64_Marshald_SendCmd_Connect( &(p_attachreq->t_prog_addr) );
+ if( NULL == p_cinfo ) {
+ return 0x01;
+ }
+ puts("connected");
- p_cinfo = Drd64_Marshald_SendCmd_Connect( &(p_attachreq->t_prog_addr) );
- if( NULL == p_cinfo ) {
- return 0x01;
+ }
+ }
+ else if( DRD64_MARSHALD_CINFOSTATUS_CONNECT == p_cinfo_self ) {
+ }
+ else if( DRD64_MARSHALD_CINFOSTATUS_POLL == p_cinfo_self ) {
}
- puts("connected");
+
+ /* Phase 1 : Connect INet-Marshald -----------*/
+
/* Phase 2 : Transport Attach-Request Packet -*/
p_phead->w_packettype = DRD64_PACKETTYPE_TRANSPORT;
/* Local => INet marshald */
else {
puts("Attach to INet");
- Drd64_Marshald_Cmd_AttachRequest_toINet(
+ Drd64_Marshald_Cmd_AttachRequest_toINet_Request(
i_fds, p_phead, p_attachreq, p_marshald );
}
}
#include"drd64_marshald.h"
+static fd_set fds_orig;
+
+
+void
+ Drd64_Marshald_Dispatch_SetFD(
+ int i_fds )
+{
+ FD_SET( i_fds, &fds_orig );
+ return;
+}
+
int
- Drd64_Marshald_Dispatch_Packet(
+ Drd64_Marshald_Dispatch_JudgePacket(
int i_fds,
int i_remainbytes,
Drd64_Marshald_MasterInformation *p_marshald )
Drd64_Marshald_Dispatch_Polling(
Drd64_Marshald_MasterInformation *p_marshald )
{
- fd_set fds_orig;
+// fd_set fds_orig;
fd_set fds_now;
int i_cnt;
int i_result;
printf("new: %d %d\n", i_socket_new, errno );
if( -1 != i_socket_new ) {
- if( i_socket_new >= i_selects_max )
- { i_selects_max = i_socket_new + 1; }
+ if( i_socket_new >= i_selects_max ) /* XXX */
+ { i_selects_max = i_socket_new + 1; } /* XXX */
+
FD_SET( i_socket_new, &fds_orig );
p_recv = Drd64_Server_RecvStatus_AllocRecvStatus(
printf("read err: [%d]%d %d pid = %d\n", i_cnt, i_err, errno,i_pid );
/* Judge Packet */
- i_result = Drd64_Marshald_Dispatch_Packet(
+ i_result = Drd64_Marshald_Dispatch_JudgePacket(
i_cnt, i_err, &drd64_marshald_info );
/* 0x00 = Judge 1 : Disconnect ( Others Packet ) */
Drd64_PacketHeader *p_phead;
Drd64_PacketData_Connect *p_connect;
Drd64_Marshald_ConnectInfo *p_cinfo;
+ Drd64_Server_RecvStatus *p_recv;
+
/* Phase 1 : Check Exist Same-Connection */
p_cinfo = Drd64_Marshald_SearchINetConnection( &p_addr_dest );
Drd64_Server_Socket_InitSocketClient_INet(
p_addr_dest, DRD64_SOCKET_NETWORK_PORT );
+ p_recv = Drd64_Server_RecvStatus_AllocRecvStatus(
+ i_socket_inet, DRD64_MARSHALD_RECVSTATUS_UNITS );
+ if( NULL == p_recv ) { return 0x02; }
+
/* 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;
+ }
+
+ Drd64_Marshald_Dispatch_SetFD( i_socket_inet );
+
+ 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;
+
+ /*
i_err = Drd64_Server_Packet_SendPacket(
i_socket_inet, (void *)p_phead,
sizeof( Drd64_PacketData_Connect ),
if( 0 > i_err ) { return NULL; }
- /* Phase 5 : Set ConnectInfo Data -------------*/
p_cinfo->b_cinfo_type = DRD64_MARSHALD_CINFOTYPE_CLIENT;
p_cinfo->i_cinfo_refcount = 1;
i_err = Drd64_Server_INetAddr_SetInAddr_LocalHost(
&(p_cinfo->t_client_addr_inet) );
p_cinfo->i_client_pid = getpid();
-
- return p_cinfo;
+ */
+ return NULL;
}
void *pv_resume;
int i_remain_bytes;
int i_read_phase;
+
+ int i_dest_fds_id;
+ int i_src_fds_id;
} Drd64_Server_RecvStatus;
#ifdef DRD64_SRC_SERVER_RECVSTATUS