diff freeDiameter/p_psm.c @ 25:67ca08d5bc48

Completed connection context files
author Sebastien Decugis <sdecugis@nict.go.jp>
date Mon, 26 Oct 2009 16:00:49 +0900
parents 0b3b46da2c12
children b4684b76c6ab
line wrap: on
line diff
--- a/freeDiameter/p_psm.c	Wed Oct 21 18:42:45 2009 +0900
+++ b/freeDiameter/p_psm.c	Mon Oct 26 16:00:49 2009 +0900
@@ -57,6 +57,8 @@
 		case_str(FDEVP_DUMP_ALL);
 		case_str(FDEVP_TERMINATE);
 		case_str(FDEVP_CNX_MSG_RECV);
+		case_str(FDEVP_CNX_ERROR);
+		case_str(FDEVP_CNX_EP_CHANGE);
 		case_str(FDEVP_MSG_INCOMING);
 		case_str(FDEVP_PSM_TIMEOUT);
 		
@@ -125,34 +127,13 @@
 #endif
 }
 
-/* Wait for the next event in the PSM, or timeout */
-static int psm_ev_timedget(struct fd_peer * peer, int *code, void ** data)
-{
-	struct fd_event * ev;
-	int ret = 0;
-	
-	TRACE_ENTRY("%p %p %p", peer, code, data);
-	
-	ret = fd_fifo_timedget(peer->p_events, &ev, &peer->p_psm_timer);
-	if (ret == ETIMEDOUT) {
-		*code = FDEVP_PSM_TIMEOUT;
-		*data = NULL;
-	} else {
-		CHECK_FCT( ret );
-		*code = ev->code;
-		*data = ev->data;
-		free(ev);
-	}
-	
-	return 0;
-}
-
 /* The state machine thread (controler) */
 static void * p_psm_th( void * arg )
 {
 	struct fd_peer * peer = (struct fd_peer *)arg;
 	int created_started = started;
 	int event;
+	size_t ev_sz;
 	void * ev_data;
 	
 	CHECK_PARAMS_DO( CHECK_PEER(peer), ASSERT(0) );
@@ -181,10 +162,10 @@
 	
 psm_loop:
 	/* Get next event */
-	CHECK_FCT_DO( psm_ev_timedget(peer, &event, &ev_data), goto psm_end );
-	TRACE_DEBUG(FULL, "'%s'\t<-- '%s'\t(%p)\t'%s'",
+	CHECK_FCT_DO( fd_event_timedget(peer->p_events, &peer->p_psm_timer, FDEVP_PSM_TIMEOUT, &event, &ev_sz, &ev_data), goto psm_end );
+	TRACE_DEBUG(FULL, "'%s'\t<-- '%s'\t(%p,%g)\t'%s'",
 			STATE_STR(peer->p_hdr.info.pi_state),
-			fd_pev_str(event), ev_data,
+			fd_pev_str(event), ev_data, ev_sz,
 			peer->p_hdr.info.pi_diamid);
 
 	/* Now, the action depends on the current state and the incoming event */
@@ -271,7 +252,7 @@
 	CHECK_PARAMS( CHECK_PEER(peer) );
 	
 	if (peer->p_hdr.info.pi_state != STATE_ZOMBIE) {
-		CHECK_FCT( fd_event_send(peer->p_events, FDEVP_TERMINATE, NULL) );
+		CHECK_FCT( fd_event_send(peer->p_events, FDEVP_TERMINATE, 0, NULL) );
 	} else {
 		TRACE_DEBUG(FULL, "Peer '%s' was already terminated", peer->p_hdr.info.pi_diamid);
 	}
"Welcome to our mercurial repository"