Drd64_Server_RecvStatus *gp_recv_resume_start;
Drd64_Server_RecvStatus *gp_recv_resume_end;
int gi_recv_resume_max;
+Drd64_Server_RecvStatus *gp_recv_sockets_start;
+Drd64_Server_RecvStatus *gp_recv_sockets_end;
int
free( gpp_recvstat );
gpp_recvstat = NULL;
- return;
+ return 0x00;
}
gp_recv_resume_start = NULL;
gi_recv_resume_max = FD_SETSIZE;
+ gp_recv_sockets_start = NULL;
+ gp_recv_sockets_end = NULL;
+
return 0x00;
}
{
Drd64_Server_RecvStatus_FreeRecvStatus_All();
- return;
+ return 0x00;
}
}
-EXTERN_SERVER_RECVSTATUS
void
Drd64_Server_RecvStatus_FreeRecvStatus(
+ Drd64_Server_RecvStatus *p_recv )
+{
+ assert( NULL != p_recv );
+
+ p_recv->pv_recv_before = NULL;
+ p_recv->pv_recv_next = NULL;
+
+ p_recv->i_recvstatus_id = -1;
+ p_recv->i_fds_id = -1;
+
+ return;
+}
+
+
+EXTERN_SERVER_RECVSTATUS
+void
+ Drd64_Server_RecvStatus_CloseRecvStatus(
int i_fds )
{
int i_cnt;
if( 0 == i_cnt ) { gi_recvstat_max = 0; }
}
- p_recv_now->i_recvstatus_id = -1;
- p_recv_now->i_fds_id = -1;
+ Drd64_Server_RecvStatus_FreeRecvStatus( p_recv_now );
}
return;
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 ---*/
p_recv_self->pv_recv_next = (void *)p_recv_before->pv_recv_next;
p_recv_before->pv_recv_next = (void *)p_recv_self;
gp_recv_resume_end = p_recv_self;
-
}
+ 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;
}
Drd64_Server_RecvStatus *p_recv_before;
Drd64_Server_RecvStatus *p_recv_next;
+
p_recv_self = *(gpp_recvstat + i_recv_id);
if( NULL == p_recv_self ) {
return 0x01;
p_recv_next->pv_recv_before = (void *)p_recv_before;
}
+ if( gp_recv_resume_end == p_recv_self ) {
+ gp_recv_resume_end = p_recv_before;
+ }
+
if( p_recv_self->i_recvstatus_id == (gi_recv_resume_max - 1) ) {
gi_recv_resume_max--;
}
}
*(gpp_recvstat + i_recv_id) = NULL;
- p_recv_self->pv_recv_before = NULL;
- p_recv_self->pv_recv_next = NULL;
+
+ Drd64_Server_RecvStatus_FreeRecvStatus( p_recv_self );
+
+ return 0x00;
+}
+
+
+EXTERN_SERVER_RECVSTATUS
+int
+ Drd64_Server_RecvStatus_AddSocketsChain(
+ Drd64_Server_RecvStatus *p_recv )
+{
+ Drd64_Server_RecvStatus *p_before;
+
+ if( NULL == p_recv ) { return 0x01; }
+
+ p_before = gp_recv_sockets_end;
+
+ p_recv->pv_recv_before = (void *)p_before;
+ if( NULL != p_before )
+ { p_before->pv_recv_next = (void *)p_recv; }
+ else
+ { gp_recv_sockets_start = p_recv; }
+
+ gp_recv_sockets_end = p_recv;
+
+ return 0x00;
+}
+
+
+EXTERN_SERVER_RECVSTATUS
+int
+ Drd64_Server_RecvStatus_DeleteSocketsChain(
+ Drd64_Server_RecvStatus *p_recv )
+{
+ Drd64_Server_RecvStatus *p_before;
+ Drd64_Server_RecvStatus *p_next;
+
+ if( NULL == p_recv ) { return -1; }
+
+ p_before = (Drd64_Server_RecvStatus *)p_recv->pv_recv_before;
+ p_next = (Drd64_Server_RecvStatus *)p_recv->pv_recv_next;
+
+ if( NULL != p_before )
+ { p_before->pv_recv_next = (void *)p_next; }
+ if( NULL != p_next )
+ { p_next->pv_recv_before = (void *)p_before; }
+
+ if( p_recv == gp_recv_sockets_start )
+ { gp_recv_sockets_start = p_next; }
+ if( p_recv == gp_recv_sockets_end )
+ { gp_recv_sockets_end = p_before; }
+
+ p_recv->pv_recv_next = NULL;
+ p_recv->pv_recv_before = NULL;
- p_recv_self->i_recvstatus_id = -1;
- p_recv_self->i_fds_id = -1;
+ return 0x00;
+}
+
+
+EXTERN_SERVER_RECVSTATUS
+void
+ Drd64_Server_RecvStatus_InitRecvStatus(
+ Drd64_Server_RecvStatus *p_recv,
+ int i_socket )
+{
+ 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_command_status = DRD64_SERVER_CMDSTATUS_STATUS_NORMAL;
+ p_recv->i_remain_bytes = sizeof( Drd64_PacketHeader );
+ p_recv->pv_resume = p_recv->pv_buf;
+ p_recv->pv_recv_before = NULL;
+ p_recv->pv_recv_next = NULL;
+ p_recv->pv_cinfo_connection = NULL;
+ p_recv->i_fds_id = i_socket;
+
+ return;
+}
+
+
+EXTERN_SERVER_RECVSTATUS
+int
+ Drd64_Server_RecvStatus_SetConnectionInfoPointer(
+ Drd64_Server_RecvStatus *p_recv_now,
+ void *pv_cinfo )
+{
+ int i_socket;
+ Drd64_Server_RecvStatus *p_recv_socket;
+
+ assert( NULL != p_recv_now );
- return NULL;
+ p_recv_now->pv_cinfo_connection = pv_cinfo;
+
+ p_recv_socket = *(gpp_recvstat + p_recv_now->i_fds_id);
+ if(( NULL != p_recv_socket ) && ( p_recv_socket != p_recv_now )) {
+ assert( NULL == p_recv_socket->pv_cinfo_connection );
+ p_recv_socket->pv_cinfo_connection = pv_cinfo;
+ }
+
+ return 0x00;
}
EXTERN_SERVER_RECVSTATUS
Drd64_Server_RecvStatus *
Drd64_Server_RecvStatus_GetRecvStatus(
- int i_fds )
+ int i_recv_id )
{
- return *(gpp_recvstat + i_fds);
+ return *(gpp_recvstat + i_recv_id);
+}
+
+
+EXTERN_SERVER_RECVSTATUS
+int
+ Drd64_Server_RecvStatus_GetSocketID(
+ int i_recv_id )
+{
+ 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_GetResumeChainStart(
+ void )
+{
+ return gp_recv_resume_start;
+}
+
+
+EXTERN_SERVER_RECVSTATUS
+Drd64_Server_RecvStatus *
+ Drd64_Server_RecvStatus_GetSocketsChainStart(
+ void )
+{
+ return gp_recv_sockets_start;
+}
+
+
/* EOF of drd64_.c ----------------------------------- */