SCTP recv interface will be changed. (Progressing...)
This commit is contained in:
parent
3d78f285be
commit
9aed43075c
|
@ -209,9 +209,13 @@ CORE_DECLARE(status_t) sctp_client(sock_id *new,
|
|||
CORE_DECLARE(status_t) sctp_connect(sock_id id, c_sockaddr_t *sa_list);
|
||||
CORE_DECLARE(int) core_sctp_sendmsg(sock_id id, const void *msg, size_t len,
|
||||
c_sockaddr_t *to, c_uint32_t ppid, c_uint16_t stream_no);
|
||||
CORE_DECLARE(int) core_sctp_recvmsg(sock_id id, void *msg, size_t len,
|
||||
c_sockaddr_t *from, sctp_info_t *sinfo, int *msg_flags);
|
||||
CORE_DECLARE(int) core_sctp_recvdata(sock_id id, void *msg, size_t len,
|
||||
c_sockaddr_t *from, sctp_info_t *sinfo);
|
||||
#define CORE_SCTP_EAGAIN -2
|
||||
#define CORE_SCTP_REMOTE_CLOSED -3
|
||||
CORE_DECLARE(int) core_sctp_recvmsg(sock_id id, void *msg, size_t len,
|
||||
CORE_DECLARE(int) core_sctp_recvmsg2(sock_id id, void *msg, size_t len,
|
||||
c_sockaddr_t *from, sctp_info_t *sinfo);
|
||||
/*
|
||||
* TUN Driver
|
||||
|
|
|
@ -202,6 +202,76 @@ int core_sctp_sendmsg(sock_id id, const void *msg, size_t len,
|
|||
}
|
||||
|
||||
int core_sctp_recvmsg(sock_id id, void *msg, size_t len,
|
||||
c_sockaddr_t *from, sctp_info_t *sinfo, int *msg_flags)
|
||||
{
|
||||
sock_t *sock = (sock_t *)id;
|
||||
int size;
|
||||
socklen_t addrlen = sizeof(struct sockaddr_storage);
|
||||
|
||||
int flags = 0;
|
||||
struct sctp_sndrcvinfo sndrcvinfo;
|
||||
|
||||
d_assert(id, return -1,);
|
||||
|
||||
size = sctp_recvmsg(sock->fd, msg, len,
|
||||
from ? &from->sa : NULL, from ? &addrlen : NULL,
|
||||
&sndrcvinfo, &flags);
|
||||
if (size < 0)
|
||||
{
|
||||
d_error("sctp_recvmsg(%d) failed(%d:%s)",
|
||||
size, errno, strerror(errno));
|
||||
return size;
|
||||
}
|
||||
|
||||
if (msg_flags)
|
||||
{
|
||||
*msg_flags = flags;
|
||||
}
|
||||
|
||||
if (sinfo)
|
||||
{
|
||||
sinfo->ppid = ntohl(sndrcvinfo.sinfo_ppid);
|
||||
sinfo->stream_no = sndrcvinfo.sinfo_stream;
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
int core_sctp_recvdata(sock_id id, void *msg, size_t len,
|
||||
c_sockaddr_t *from, sctp_info_t *sinfo)
|
||||
{
|
||||
int size;
|
||||
int flags = 0;
|
||||
|
||||
do
|
||||
{
|
||||
size = core_sctp_recvmsg(id, msg, len, from, sinfo, &flags);
|
||||
if (size < 0)
|
||||
{
|
||||
d_error("core_sctp_recvdata(%d) failed(%d:%s)",
|
||||
size, errno, strerror(errno));
|
||||
return size;
|
||||
}
|
||||
|
||||
if (flags & MSG_NOTIFICATION)
|
||||
{
|
||||
/* Nothing */
|
||||
}
|
||||
else if (flags & MSG_EOR)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
d_assert(0, return -1,);
|
||||
}
|
||||
|
||||
} while(1);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
int core_sctp_recvmsg2(sock_id id, void *msg, size_t len,
|
||||
c_sockaddr_t *from, sctp_info_t *sinfo)
|
||||
{
|
||||
sock_t *sock = (sock_t *)id;
|
||||
|
|
|
@ -67,7 +67,7 @@ static void *THREAD_FUNC test2_main(thread_id id, void *data)
|
|||
rv = core_freeaddrinfo(addr);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
||||
size = core_sctp_recvmsg(sctp, str, STRLEN, &from, &sinfo);
|
||||
size = core_sctp_recvdata(sctp, str, STRLEN, &from, &sinfo);
|
||||
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
|
||||
ABTS_INT_EQUAL(tc, PPID, sinfo.ppid);
|
||||
|
||||
|
@ -162,7 +162,7 @@ static void sctp_test3(abts_case *tc, void *data)
|
|||
rv = thread_create(&test3_thread, NULL, test3_main, tc);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
||||
size = core_sctp_recvmsg(sctp, str, STRLEN, &from, &sinfo);
|
||||
size = core_sctp_recvdata(sctp, str, STRLEN, &from, &sinfo);
|
||||
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
|
||||
ABTS_INT_EQUAL(tc, PPID, sinfo.ppid);
|
||||
|
||||
|
@ -194,7 +194,7 @@ static void *THREAD_FUNC test4_main(thread_id id, void *data)
|
|||
size = core_sctp_sendmsg(sctp, DATASTR, strlen(DATASTR), NULL, PPID, 0);
|
||||
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
|
||||
|
||||
size = core_sctp_recvmsg(sctp, str, STRLEN, NULL, &sinfo);
|
||||
size = core_sctp_recvdata(sctp, str, STRLEN, NULL, &sinfo);
|
||||
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
|
||||
ABTS_INT_EQUAL(tc, PPID, sinfo.ppid);
|
||||
|
||||
|
@ -225,7 +225,7 @@ static void sctp_test4(abts_case *tc, void *data)
|
|||
rv = thread_create(&test4_thread, NULL, test4_main, tc);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
||||
size = core_sctp_recvmsg(sctp, str, STRLEN, &from, &sinfo);
|
||||
size = core_sctp_recvdata(sctp, str, STRLEN, &from, &sinfo);
|
||||
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
|
||||
ABTS_STR_EQUAL(tc, "::1", CORE_ADDR(&from, buf));
|
||||
ABTS_INT_EQUAL(tc, PPID, sinfo.ppid);
|
||||
|
@ -272,7 +272,7 @@ static void *THREAD_FUNC test5_main(thread_id id, void *data)
|
|||
remote_addr, PPID, 0);
|
||||
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
|
||||
|
||||
size = core_sctp_recvmsg(sctp, str, STRLEN, &from, &sinfo);
|
||||
size = core_sctp_recvdata(sctp, str, STRLEN, &from, &sinfo);
|
||||
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
|
||||
ABTS_STR_EQUAL(tc, "::1", CORE_ADDR(&from, buf));
|
||||
ABTS_INT_EQUAL(tc, PPID, sinfo.ppid);
|
||||
|
@ -305,7 +305,7 @@ static void sctp_test5(abts_case *tc, void *data)
|
|||
rv = thread_create(&test5_thread, NULL, test5_main, tc);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
||||
size = core_sctp_recvmsg(sctp, str, STRLEN, &from, &sinfo);
|
||||
size = core_sctp_recvdata(sctp, str, STRLEN, &from, &sinfo);
|
||||
ABTS_INT_EQUAL(tc, strlen(DATASTR), size);
|
||||
ABTS_STR_EQUAL(tc, "::1", CORE_ADDR(&from, buf));
|
||||
ABTS_INT_EQUAL(tc, PPID, sinfo.ppid);
|
||||
|
|
|
@ -22,6 +22,8 @@ char* mme_event_get_name(event_t *e)
|
|||
return "MME_EVT_S1AP_DELAYED_SEND";
|
||||
case MME_EVT_S1AP_LO_ACCEPT:
|
||||
return "MME_EVT_S1AP_LO_ACCEPT";
|
||||
case MME_EVT_S1AP_LO_SCTP_COMM_UP:
|
||||
return "MME_EVT_S1AP_LO_SCTP_COMM_UP";
|
||||
case MME_EVT_S1AP_LO_CONNREFUSED:
|
||||
return "MME_EVT_S1AP_LO_CONNREFUSED";
|
||||
case MME_EVT_S1AP_S1_HOLDING_TIMER:
|
||||
|
|
|
@ -16,6 +16,7 @@ typedef enum {
|
|||
MME_EVT_S1AP_MESSAGE,
|
||||
MME_EVT_S1AP_DELAYED_SEND,
|
||||
MME_EVT_S1AP_LO_ACCEPT,
|
||||
MME_EVT_S1AP_LO_SCTP_COMM_UP,
|
||||
MME_EVT_S1AP_LO_CONNREFUSED,
|
||||
MME_EVT_S1AP_S1_HOLDING_TIMER,
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ status_t s1ap_recv(sock_id id, pkbuf_t *pkbuf)
|
|||
{
|
||||
int size;
|
||||
|
||||
size = core_sctp_recvmsg(id, pkbuf->payload, MAX_SDU_LEN, NULL, NULL);
|
||||
size = core_sctp_recvdata(id, pkbuf->payload, MAX_SDU_LEN, NULL, NULL);
|
||||
if (size <= 0)
|
||||
{
|
||||
d_error("s1ap_recv() failed");
|
||||
|
@ -146,7 +146,7 @@ int s1ap_recv_handler(sock_id sock, void *data)
|
|||
return -1;
|
||||
}
|
||||
|
||||
size = core_sctp_recvmsg(sock, pkbuf->payload, pkbuf->len, NULL, &sinfo);
|
||||
size = core_sctp_recvmsg2(sock, pkbuf->payload, pkbuf->len, NULL, &sinfo);
|
||||
if (size <= 0)
|
||||
{
|
||||
pkbuf_free(pkbuf);
|
||||
|
|
Loading…
Reference in New Issue