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");
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;
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");
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 )
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");
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 )
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");
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 )
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 );
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");
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 )
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; }
/* 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 ) {
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 ) {
}
- i_result = 0x02; /* XXX */
+ //i_result = 0x02; /* XXX */
return i_result;
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) );
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 ");
int
Drd64_Marshald_Cmd_Connect(
- int i_fds,
+ int i_recv_id,
Drd64_PacketHeader *p_phead,
Drd64_PacketData_Connect *p_connect )
{
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;
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? */
}
+/* 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 );
/* 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 ) {
}
}
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 );
}
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;
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;
/* 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 )
{
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 );
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 {
} */
}
else {
+ i_resume_flag = 0x00;
for( i_cnt = 0; i_cnt < i_selects_max; i_cnt++ ) {
/* Drd64 Clinet & Marshald => No Judge */
/* 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 */
#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 */
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. */
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;
/* 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();
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;
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;
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 --- */
= Drd64_Server_RecvStatus_AllocRecvStatus(
i_fds, i_alloc_units );
if( NULL == p_recv_new ) {
- return NULL;
+ return -2;
}
/* Push & Chain 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;
}
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; }
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; }
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; }
return gi_recvstat_max;
}
+
+EXTERN_SERVER_RECVSTATUS
+Drd64_Server_RecvStatus *
+ Drd64_Server_RecvStatus_GetResumeStart(
+ void )
+{
+ return gp_recv_resume_start;
+}
+
/* EOF of drd64_.c ----------------------------------- */
EXTERN_SERVER_RECVSTATUS
- Drd64_Server_RecvStatus *
+ int
Drd64_Server_RecvStatus_PushResumeChain(
int i_fds,
int i_alloc_units );
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 );
Drd64_Server_RecvStatus_GetRecvStatMax(
void );
+EXTERN_SERVER_RECVSTATUS
+ Drd64_Server_RecvStatus *
+ Drd64_Server_RecvStatus_GetResumeStart(
+ void );
+
#endif /* DRD64_HEADER_XXX */