X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Frmr%2Fnng%2Fsrc%2Frtable_nng_static.c;h=34a1ed15ca934a7d89ce65740156970ee1296e62;hb=refs%2Fchanges%2F62%2F2562%2F1;hp=6adf23061e79837e10a51f1333e188f35f09cb5a;hpb=0d4def6c7b673f3be486338ced65ccdd25a859ed;p=ric-plt%2Flib%2Frmr.git diff --git a/src/rmr/nng/src/rtable_nng_static.c b/src/rmr/nng/src/rtable_nng_static.c index 6adf230..34a1ed1 100644 --- a/src/rmr/nng/src/rtable_nng_static.c +++ b/src/rmr/nng/src/rtable_nng_static.c @@ -390,20 +390,6 @@ static inline rtable_ent_t* uta_get_rte( route_table_t *rt, int sid, int mtype, return rte; } -/* - Given a route table and meid string, find the owner (if known). Returns a pointer to - the endpoint struct or nil. -*/ -static inline endpoint_t* get_meid_owner( route_table_t *rt, char* meid ) { - endpoint_t* ep; // the ep we found in the hash - - if( rt == NULL || rt->hash == NULL || meid == NULL || *meid == 0 ) { - return NULL; - } - - return (endpoint_t *) rmr_sym_get( rt->hash, meid, RT_ME_SPACE ); -} - /* Return a string of count information. E.g.: : @@ -443,13 +429,16 @@ static inline char* get_ep_counts( endpoint_t* ep, char* ubuf, int ubuf_len ) { We've been told that the meid is a string, thus we count on it being a nil terminated set of bytes. + + If we return false there is no guarentee that the caller's reference to the + ep is valid or nil. Caller can trus the ep reference only when the return is + true. */ static int epsock_meid( route_table_t *rtable, rmr_mbuf_t* msg, nng_socket* nn_sock, endpoint_t** uepp ) { endpoint_t* ep; // seected end point int state = FALSE; // processing state char* meid; - errno = 0; if( ! nn_sock || msg == NULL || rtable == NULL ) { // missing stuff; bail fast errno = EINVAL; @@ -459,14 +448,14 @@ static int epsock_meid( route_table_t *rtable, rmr_mbuf_t* msg, nng_socket* nn_s meid = ((uta_mhdr_t *) msg->header)->meid; if( (ep = get_meid_owner( rtable, meid )) == NULL ) { - if( uepp != NULL ) { // caller needs refernce to endpoint too - *uepp = NULL; - } - if( DEBUG ) rmr_vlog( RMR_VL_DEBUG, "epsock_meid: no ep in hash for (%s)\n", meid ); return FALSE; } + if( uepp != NULL ) { // ensure ep is returned to the caller + *uepp = ep; + } + state = TRUE; if( ! ep->open ) { // not connected if( ep->addr == NULL ) { // name didn't resolve before, try again