Changes in freeDiameter/p_psm.c [20:277ec00d793e:29:5ba91682f0bc] in freeDiameter
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
freeDiameter/p_psm.c
r20 r29 55 55 #define case_str( _val )\ 56 56 case _val : return #_val 57 case_str(FDEVP_DUMP_ALL); 57 58 case_str(FDEVP_TERMINATE); 58 case_str(FDEVP_DUMP_ALL); 59 case_str(FDEVP_MSG_INCOMING); 59 case_str(FDEVP_CNX_MSG_RECV); 60 case_str(FDEVP_CNX_ERROR); 61 case_str(FDEVP_CNX_EP_CHANGE); 62 case_str(FDEVP_CNX_INCOMING); 60 63 case_str(FDEVP_PSM_TIMEOUT); 61 64 … … 125 128 } 126 129 127 /* Wait for the next event in the PSM, or timeout */128 static int psm_ev_timedget(struct fd_peer * peer, int *code, void ** data)129 {130 struct fd_event * ev;131 int ret = 0;132 133 TRACE_ENTRY("%p %p %p", peer, code, data);134 135 ret = fd_fifo_timedget(peer->p_events, &ev, &peer->p_psm_timer);136 if (ret == ETIMEDOUT) {137 *code = FDEVP_PSM_TIMEOUT;138 *data = NULL;139 } else {140 CHECK_FCT( ret );141 *code = ev->code;142 *data = ev->data;143 free(ev);144 }145 146 return 0;147 }148 149 130 /* The state machine thread (controler) */ 150 131 static void * p_psm_th( void * arg ) … … 153 134 int created_started = started; 154 135 int event; 136 size_t ev_sz; 155 137 void * ev_data; 156 138 … … 181 163 psm_loop: 182 164 /* Get next event */ 183 CHECK_FCT_DO( psm_ev_timedget(peer, &event, &ev_data), goto psm_end );184 TRACE_DEBUG(FULL, "'%s'\t<-- '%s'\t(%p )\t'%s'",165 CHECK_FCT_DO( fd_event_timedget(peer->p_events, &peer->p_psm_timer, FDEVP_PSM_TIMEOUT, &event, &ev_sz, &ev_data), goto psm_end ); 166 TRACE_DEBUG(FULL, "'%s'\t<-- '%s'\t(%p,%zd)\t'%s'", 185 167 STATE_STR(peer->p_hdr.info.pi_state), 186 fd_pev_str(event), ev_data, 168 fd_pev_str(event), ev_data, ev_sz, 187 169 peer->p_hdr.info.pi_diamid); 188 170 … … 227 209 } 228 210 211 /* A new connection was established and CER containing this peer id was received */ 212 if (event == FDEVP_CNX_INCOMING) { 213 struct cnx_incoming * params = ev_data; 214 ASSERT(params); 215 216 switch (peer->p_hdr.info.pi_state) { 217 case STATE_CLOSED: 218 TODO("Handle the CER, validate the peer if needed (and set expiry), set the alt_fifo in the connection, reply a CEA, eventually handshake, move to OPEN or REOPEN state"); 219 break; 220 221 case STATE_WAITCNXACK: 222 case STATE_WAITCEA: 223 TODO("Election"); 224 break; 225 226 default: 227 TODO("Reply with error CEA"); 228 TODO("Close the connection"); 229 /* reject_incoming_connection */ 230 231 } 232 233 free(ev_data); 234 goto psm_loop; 235 } 236 229 237 /* MSG_RECEIVED: fd_p_expi_update(struct fd_peer * peer ) */ 230 238 /* If timeout or OPEN : call cb if defined */ … … 241 249 psm_end: 242 250 pthread_cleanup_pop(1); /* set STATE_ZOMBIE */ 251 peer->p_psm = (pthread_t)NULL; 252 pthread_detach(pthread_self()); 243 253 return NULL; 244 254 } 245 246 247 248 255 249 256 /* Create the PSM thread of one peer structure */ … … 267 274 TRACE_ENTRY("%p", peer); 268 275 CHECK_PARAMS( CHECK_PEER(peer) ); 276 269 277 if (peer->p_hdr.info.pi_state != STATE_ZOMBIE) { 270 CHECK_FCT( fd_event_send(peer->p_events, FDEVP_TERMINATE, NULL) );278 CHECK_FCT( fd_event_send(peer->p_events, FDEVP_TERMINATE, 0, NULL) ); 271 279 } else { 272 280 TRACE_DEBUG(FULL, "Peer '%s' was already terminated", peer->p_hdr.info.pi_diamid);
Note: See TracChangeset
for help on using the changeset viewer.