Changes in freeDiameter/p_psm.c [29:5ba91682f0bc:20:277ec00d793e] in freeDiameter
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
freeDiameter/p_psm.c
r29 r20 55 55 #define case_str( _val )\ 56 56 case _val : return #_val 57 case_str(FDEVP_TERMINATE); 57 58 case_str(FDEVP_DUMP_ALL); 58 case_str(FDEVP_TERMINATE); 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); 59 case_str(FDEVP_MSG_INCOMING); 63 60 case_str(FDEVP_PSM_TIMEOUT); 64 61 … … 128 125 } 129 126 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 130 149 /* The state machine thread (controler) */ 131 150 static void * p_psm_th( void * arg ) … … 134 153 int created_started = started; 135 154 int event; 136 size_t ev_sz;137 155 void * ev_data; 138 156 … … 163 181 psm_loop: 164 182 /* Get next event */ 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'",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'", 167 185 STATE_STR(peer->p_hdr.info.pi_state), 168 fd_pev_str(event), ev_data, ev_sz,186 fd_pev_str(event), ev_data, 169 187 peer->p_hdr.info.pi_diamid); 170 188 … … 209 227 } 210 228 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 237 229 /* MSG_RECEIVED: fd_p_expi_update(struct fd_peer * peer ) */ 238 230 /* If timeout or OPEN : call cb if defined */ … … 249 241 psm_end: 250 242 pthread_cleanup_pop(1); /* set STATE_ZOMBIE */ 251 peer->p_psm = (pthread_t)NULL;252 pthread_detach(pthread_self());253 243 return NULL; 254 244 } 245 246 247 255 248 256 249 /* Create the PSM thread of one peer structure */ … … 274 267 TRACE_ENTRY("%p", peer); 275 268 CHECK_PARAMS( CHECK_PEER(peer) ); 276 277 269 if (peer->p_hdr.info.pi_state != STATE_ZOMBIE) { 278 CHECK_FCT( fd_event_send(peer->p_events, FDEVP_TERMINATE, 0,NULL) );270 CHECK_FCT( fd_event_send(peer->p_events, FDEVP_TERMINATE, NULL) ); 279 271 } else { 280 272 TRACE_DEBUG(FULL, "Peer '%s' was already terminated", peer->p_hdr.info.pi_diamid);
Note: See TracChangeset
for help on using the changeset viewer.