char resp[16];
int len;
struct RFCNB_Pkt *pkt, res_pkt;
+ int result = 0;
/* We build and send the session request, then read the response */
#endif
if ((len = RFCNB_Put_Pkt(con, pkt, RFCNB_Pkt_Sess_Len)) < 0) {
-
+ RFCNB_Free_Pkt(pkt);
return (RFCNBE_Bad); /* Should be able to write that lot ... */
}
res_pkt.next = NULL;
if ((len = RFCNB_Get_Pkt(con, &res_pkt, sizeof(resp))) < 0) {
-
+ RFCNB_Free_Pkt(pkt);
return (RFCNBE_Bad);
}
break;
}
- return (RFCNBE_Bad);
+ result = (RFCNBE_Bad);
break;
case RFCNB_SESSION_ACK: /* Got what we wanted ... */
- return (0);
+ result = (0);
break;
case RFCNB_SESSION_RETARGET: /* Go elsewhere */
memcpy(Dest_IP, (resp + RFCNB_Pkt_IP_Offset), sizeof(struct in_addr));
*port = SVAL(resp, RFCNB_Pkt_Port_Offset);
- return (0);
+ result = (0);
break;
default: /* A protocol error */
RFCNB_errno = RFCNBE_ProtErr;
- return (RFCNBE_Bad);
+ result = (RFCNBE_Bad);
break;
}
+
+ RFCNB_Free_Pkt(pkt);
+ return result;
}