src: shorter stream function names
%s/_client_conn_/_cli_/g %s/_server_conn_/_srv_/g %s/_client_/cli/g %s/server/srv/g %s/RECONFIG/RECONF/g %s/SERVER/SRV/g %s/CLIENT/CLI/g
This commit is contained in:
parent
ad2e9d637e
commit
cee5fb36da
|
@ -43,7 +43,7 @@ const struct log_info osmo_stream_client_test_log_info = {
|
|||
.num_cat = ARRAY_SIZE(osmo_stream_client_test_cat),
|
||||
};
|
||||
|
||||
static struct osmo_stream_client_conn *conn;
|
||||
static struct osmo_stream_cli *conn;
|
||||
|
||||
void sighandler(int foo)
|
||||
{
|
||||
|
@ -51,9 +51,9 @@ void sighandler(int foo)
|
|||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
static int connect_cb(struct osmo_stream_client_conn *conn)
|
||||
static int connect_cb(struct osmo_stream_cli *conn)
|
||||
{
|
||||
int *__num_msgs = osmo_stream_client_conn_get_data(conn);
|
||||
int *__num_msgs = osmo_stream_cli_get_data(conn);
|
||||
int num_msgs = *__num_msgs, i;
|
||||
|
||||
LOGP(DIPATEST, LOGL_NOTICE, "connected\n");
|
||||
|
@ -85,7 +85,7 @@ static int connect_cb(struct osmo_stream_client_conn *conn)
|
|||
|
||||
osmo_ipa_msg_push_header(msg, IPAC_PROTO_OSMO);
|
||||
|
||||
osmo_stream_client_conn_send(conn, msg);
|
||||
osmo_stream_cli_send(conn, msg);
|
||||
|
||||
LOGP(DIPATEST, LOGL_DEBUG, "enqueueing msg %d of "
|
||||
"%d bytes to be sent\n", i, msg->len);
|
||||
|
@ -93,10 +93,10 @@ static int connect_cb(struct osmo_stream_client_conn *conn)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int read_cb(struct osmo_stream_client_conn *conn)
|
||||
static int read_cb(struct osmo_stream_cli *conn)
|
||||
{
|
||||
struct msgb *msg;
|
||||
struct osmo_fd *ofd = osmo_stream_client_conn_get_ofd(conn);
|
||||
struct osmo_fd *ofd = osmo_stream_cli_get_ofd(conn);
|
||||
|
||||
LOGP(DIPATEST, LOGL_DEBUG, "received message from stream\n");
|
||||
|
||||
|
@ -162,24 +162,24 @@ int main(int argc, char *argv[])
|
|||
* initialize stream client.
|
||||
*/
|
||||
|
||||
conn = osmo_stream_client_conn_create(tall_test);
|
||||
conn = osmo_stream_cli_create(tall_test);
|
||||
if (conn == NULL) {
|
||||
fprintf(stderr, "cannot create client\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
osmo_stream_client_conn_set_addr(conn, "127.0.0.1");
|
||||
osmo_stream_client_conn_set_port(conn, 10000);
|
||||
osmo_stream_client_conn_set_connect_cb(conn, connect_cb);
|
||||
osmo_stream_client_conn_set_read_cb(conn, read_cb);
|
||||
osmo_stream_client_conn_set_data(conn, &num_msgs);
|
||||
osmo_stream_cli_set_addr(conn, "127.0.0.1");
|
||||
osmo_stream_cli_set_port(conn, 10000);
|
||||
osmo_stream_cli_set_connect_cb(conn, connect_cb);
|
||||
osmo_stream_cli_set_read_cb(conn, read_cb);
|
||||
osmo_stream_cli_set_data(conn, &num_msgs);
|
||||
|
||||
if (osmo_stream_client_conn_open(conn) < 0) {
|
||||
if (osmo_stream_cli_open(conn) < 0) {
|
||||
fprintf(stderr, "cannot open client\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
int on = 1, ret;
|
||||
struct osmo_fd *ofd = osmo_stream_client_conn_get_ofd(conn);
|
||||
struct osmo_fd *ofd = osmo_stream_cli_get_ofd(conn);
|
||||
|
||||
ret = setsockopt(ofd->fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
|
||||
if (ret < 0) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* IPA stream server example */
|
||||
/* IPA stream srv example */
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@ -19,7 +19,7 @@ static void *tall_test;
|
|||
|
||||
#define DSTREAMTEST 0
|
||||
|
||||
struct log_info_cat osmo_stream_server_test_cat[] = {
|
||||
struct log_info_cat osmo_stream_srv_test_cat[] = {
|
||||
[DSTREAMTEST] = {
|
||||
.name = "DSTREAMTEST",
|
||||
.description = "STREAMSERVER-mode test",
|
||||
|
@ -28,14 +28,14 @@ struct log_info_cat osmo_stream_server_test_cat[] = {
|
|||
},
|
||||
};
|
||||
|
||||
const struct log_info osmo_stream_server_test_log_info = {
|
||||
const struct log_info osmo_stream_srv_test_log_info = {
|
||||
.filter_fn = NULL,
|
||||
.cat = osmo_stream_server_test_cat,
|
||||
.num_cat = ARRAY_SIZE(osmo_stream_server_test_cat),
|
||||
.cat = osmo_stream_srv_test_cat,
|
||||
.num_cat = ARRAY_SIZE(osmo_stream_srv_test_cat),
|
||||
};
|
||||
|
||||
static struct osmo_stream_server_link *server;
|
||||
static struct osmo_stream_server_conn *conn;
|
||||
static struct osmo_stream_srv_link *srv;
|
||||
static struct osmo_stream_srv *conn;
|
||||
|
||||
void sighandler(int foo)
|
||||
{
|
||||
|
@ -43,10 +43,10 @@ void sighandler(int foo)
|
|||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
int read_cb(struct osmo_stream_server_conn *conn)
|
||||
int read_cb(struct osmo_stream_srv *conn)
|
||||
{
|
||||
struct msgb *msg;
|
||||
struct osmo_fd *ofd = osmo_stream_server_conn_get_ofd(conn);
|
||||
struct osmo_fd *ofd = osmo_stream_srv_get_ofd(conn);
|
||||
|
||||
LOGP(DSTREAMTEST, LOGL_DEBUG, "received message from stream\n");
|
||||
|
||||
|
@ -57,21 +57,21 @@ int read_cb(struct osmo_stream_server_conn *conn)
|
|||
}
|
||||
if (osmo_ipa_msg_recv(ofd->fd, msg) <= 0) {
|
||||
LOGP(DSTREAMTEST, LOGL_ERROR, "cannot receive message\n");
|
||||
osmo_stream_server_conn_destroy(conn);
|
||||
osmo_stream_srv_destroy(conn);
|
||||
msgb_free(msg);
|
||||
return 0;
|
||||
}
|
||||
osmo_stream_server_conn_send(conn, msg);
|
||||
osmo_stream_srv_send(conn, msg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int close_cb(struct osmo_stream_server_conn *dummy)
|
||||
static int close_cb(struct osmo_stream_srv *dummy)
|
||||
{
|
||||
conn = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int accept_cb(struct osmo_stream_server_link *server, int fd)
|
||||
static int accept_cb(struct osmo_stream_srv_link *srv, int fd)
|
||||
{
|
||||
if (conn != NULL) {
|
||||
LOGP(DSTREAMTEST, LOGL_ERROR, "Sorry, this example only "
|
||||
|
@ -79,8 +79,8 @@ static int accept_cb(struct osmo_stream_server_link *server, int fd)
|
|||
return -1;
|
||||
}
|
||||
|
||||
conn = osmo_stream_server_conn_create(tall_test, server, fd,
|
||||
read_cb, close_cb, NULL);
|
||||
conn = osmo_stream_srv_create(tall_test, srv, fd,
|
||||
read_cb, close_cb, NULL);
|
||||
if (conn == NULL) {
|
||||
LOGP(DSTREAMTEST, LOGL_ERROR,
|
||||
"error while creating connection\n");
|
||||
|
@ -92,28 +92,28 @@ static int accept_cb(struct osmo_stream_server_link *server, int fd)
|
|||
|
||||
int main(void)
|
||||
{
|
||||
tall_test = talloc_named_const(NULL, 1, "osmo_stream_server_test");
|
||||
tall_test = talloc_named_const(NULL, 1, "osmo_stream_srv_test");
|
||||
|
||||
osmo_init_logging(&osmo_stream_server_test_log_info);
|
||||
osmo_init_logging(&osmo_stream_srv_test_log_info);
|
||||
log_set_log_level(osmo_stderr_target, LOGL_NOTICE);
|
||||
|
||||
/*
|
||||
* initialize stream server.
|
||||
* initialize stream srv.
|
||||
*/
|
||||
|
||||
server = osmo_stream_server_link_create(tall_test);
|
||||
if (server == NULL) {
|
||||
srv = osmo_stream_srv_link_create(tall_test);
|
||||
if (srv == NULL) {
|
||||
fprintf(stderr, "cannot create client\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
osmo_stream_server_link_set_addr(server, "127.0.0.1");
|
||||
osmo_stream_server_link_set_port(server, 10000);
|
||||
osmo_stream_server_link_set_accept_cb(server, accept_cb);
|
||||
osmo_stream_srv_link_set_addr(srv, "127.0.0.1");
|
||||
osmo_stream_srv_link_set_port(srv, 10000);
|
||||
osmo_stream_srv_link_set_accept_cb(srv, accept_cb);
|
||||
|
||||
int on = 1, ret;
|
||||
struct osmo_fd *ofd = osmo_stream_server_link_get_ofd(server);
|
||||
struct osmo_fd *ofd = osmo_stream_srv_link_get_ofd(srv);
|
||||
|
||||
if (osmo_stream_server_link_open(server) < 0) {
|
||||
if (osmo_stream_srv_link_open(srv) < 0) {
|
||||
fprintf(stderr, "cannot open client\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
#define DSTREAMTEST 0
|
||||
|
||||
struct log_info_cat osmo_stream_client_test_cat[] = {
|
||||
struct log_info_cat osmo_stream_cli_test_cat[] = {
|
||||
[DSTREAMTEST] = {
|
||||
.name = "DSTREAMTEST",
|
||||
.description = "STREAMCLIENT-mode test",
|
||||
|
@ -23,13 +23,13 @@ struct log_info_cat osmo_stream_client_test_cat[] = {
|
|||
},
|
||||
};
|
||||
|
||||
const struct log_info osmo_stream_client_test_log_info = {
|
||||
const struct log_info osmo_stream_cli_test_log_info = {
|
||||
.filter_fn = NULL,
|
||||
.cat = osmo_stream_client_test_cat,
|
||||
.num_cat = ARRAY_SIZE(osmo_stream_client_test_cat),
|
||||
.cat = osmo_stream_cli_test_cat,
|
||||
.num_cat = ARRAY_SIZE(osmo_stream_cli_test_cat),
|
||||
};
|
||||
|
||||
static struct osmo_stream_client_conn *conn;
|
||||
static struct osmo_stream_cli *conn;
|
||||
|
||||
void sighandler(int foo)
|
||||
{
|
||||
|
@ -37,13 +37,13 @@ void sighandler(int foo)
|
|||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
static int connect_cb(struct osmo_stream_client_conn *conn)
|
||||
static int connect_cb(struct osmo_stream_cli *conn)
|
||||
{
|
||||
LOGP(DSTREAMTEST, LOGL_NOTICE, "connected\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int read_cb(struct osmo_stream_client_conn *conn)
|
||||
static int read_cb(struct osmo_stream_cli *conn)
|
||||
{
|
||||
struct msgb *msg;
|
||||
|
||||
|
@ -54,7 +54,7 @@ static int read_cb(struct osmo_stream_client_conn *conn)
|
|||
LOGP(DSTREAMTEST, LOGL_ERROR, "cannot allocate message\n");
|
||||
return 0;
|
||||
}
|
||||
if (osmo_stream_client_conn_recv(conn, msg) < 0) {
|
||||
if (osmo_stream_cli_recv(conn, msg) < 0) {
|
||||
LOGP(DSTREAMTEST, LOGL_ERROR, "cannot receive message\n");
|
||||
return 0;
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ static int kbd_cb(struct osmo_fd *fd, unsigned int what)
|
|||
ptr = msgb_put(msg, strlen(buf));
|
||||
memcpy(ptr, buf, ret);
|
||||
|
||||
osmo_stream_client_conn_send(conn, msg);
|
||||
osmo_stream_cli_send(conn, msg);
|
||||
|
||||
LOGP(DSTREAMTEST, LOGL_NOTICE, "message of %d bytes sent\n", msg->len);
|
||||
|
||||
|
@ -94,27 +94,27 @@ int main(void)
|
|||
{
|
||||
struct osmo_fd *kbd_ofd;
|
||||
|
||||
tall_test = talloc_named_const(NULL, 1, "osmo_stream_client_test");
|
||||
tall_test = talloc_named_const(NULL, 1, "osmo_stream_cli_test");
|
||||
|
||||
osmo_init_logging(&osmo_stream_client_test_log_info);
|
||||
osmo_init_logging(&osmo_stream_cli_test_log_info);
|
||||
log_set_log_level(osmo_stderr_target, 1);
|
||||
|
||||
/*
|
||||
* initialize stream client.
|
||||
* initialize stream cli.
|
||||
*/
|
||||
|
||||
conn = osmo_stream_client_conn_create(tall_test);
|
||||
conn = osmo_stream_cli_create(tall_test);
|
||||
if (conn == NULL) {
|
||||
fprintf(stderr, "cannot create client\n");
|
||||
fprintf(stderr, "cannot create cli\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
osmo_stream_client_conn_set_addr(conn, "127.0.0.1");
|
||||
osmo_stream_client_conn_set_port(conn, 10000);
|
||||
osmo_stream_client_conn_set_connect_cb(conn, connect_cb);
|
||||
osmo_stream_client_conn_set_read_cb(conn, read_cb);
|
||||
osmo_stream_cli_set_addr(conn, "127.0.0.1");
|
||||
osmo_stream_cli_set_port(conn, 10000);
|
||||
osmo_stream_cli_set_connect_cb(conn, connect_cb);
|
||||
osmo_stream_cli_set_read_cb(conn, read_cb);
|
||||
|
||||
if (osmo_stream_client_conn_open(conn) < 0) {
|
||||
fprintf(stderr, "cannot open client\n");
|
||||
if (osmo_stream_cli_open(conn) < 0) {
|
||||
fprintf(stderr, "cannot open cli\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ static void *tall_test;
|
|||
|
||||
#define DSTREAMTEST 0
|
||||
|
||||
struct log_info_cat osmo_stream_server_test_cat[] = {
|
||||
struct log_info_cat osmo_stream_srv_test_cat[] = {
|
||||
[DSTREAMTEST] = {
|
||||
.name = "DSTREAMTEST",
|
||||
.description = "STREAMSERVER-mode test",
|
||||
|
@ -25,14 +25,14 @@ struct log_info_cat osmo_stream_server_test_cat[] = {
|
|||
},
|
||||
};
|
||||
|
||||
const struct log_info osmo_stream_server_test_log_info = {
|
||||
const struct log_info osmo_stream_srv_test_log_info = {
|
||||
.filter_fn = NULL,
|
||||
.cat = osmo_stream_server_test_cat,
|
||||
.num_cat = ARRAY_SIZE(osmo_stream_server_test_cat),
|
||||
.cat = osmo_stream_srv_test_cat,
|
||||
.num_cat = ARRAY_SIZE(osmo_stream_srv_test_cat),
|
||||
};
|
||||
|
||||
static struct osmo_stream_server_link *server;
|
||||
static struct osmo_stream_server_conn *conn;
|
||||
static struct osmo_stream_srv_link *srv;
|
||||
static struct osmo_stream_srv *conn;
|
||||
|
||||
|
||||
void sighandler(int foo)
|
||||
|
@ -41,7 +41,7 @@ void sighandler(int foo)
|
|||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
int read_cb(struct osmo_stream_server_conn *conn)
|
||||
int read_cb(struct osmo_stream_srv *conn)
|
||||
{
|
||||
struct msgb *msg;
|
||||
|
||||
|
@ -52,7 +52,7 @@ int read_cb(struct osmo_stream_server_conn *conn)
|
|||
LOGP(DSTREAMTEST, LOGL_ERROR, "cannot allocate message\n");
|
||||
return 0;
|
||||
}
|
||||
if (osmo_stream_server_conn_recv(conn, msg) < 0) {
|
||||
if (osmo_stream_srv_recv(conn, msg) < 0) {
|
||||
LOGP(DSTREAMTEST, LOGL_ERROR, "cannot receive message\n");
|
||||
return 0;
|
||||
}
|
||||
|
@ -60,13 +60,13 @@ int read_cb(struct osmo_stream_server_conn *conn)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int close_cb(struct osmo_stream_server_conn *dummy)
|
||||
static int close_cb(struct osmo_stream_srv *dummy)
|
||||
{
|
||||
conn = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int accept_cb(struct osmo_stream_server_link *server, int fd)
|
||||
static int accept_cb(struct osmo_stream_srv_link *srv, int fd)
|
||||
{
|
||||
if (conn != NULL) {
|
||||
LOGP(DSTREAMTEST, LOGL_ERROR, "Sorry, this example only "
|
||||
|
@ -74,7 +74,7 @@ static int accept_cb(struct osmo_stream_server_link *server, int fd)
|
|||
return -1;
|
||||
}
|
||||
|
||||
conn = osmo_stream_server_conn_create(tall_test, server, fd, read_cb,
|
||||
conn = osmo_stream_srv_create(tall_test, srv, fd, read_cb,
|
||||
close_cb, NULL);
|
||||
if (conn == NULL) {
|
||||
LOGP(DSTREAMTEST, LOGL_ERROR,
|
||||
|
@ -101,14 +101,14 @@ static int kbd_cb(struct osmo_fd *fd, unsigned int what)
|
|||
return 0;
|
||||
}
|
||||
|
||||
msg = msgb_alloc(1024, "osmo_stream_server_test");
|
||||
msg = msgb_alloc(1024, "osmo_stream_srv_test");
|
||||
if (msg == NULL) {
|
||||
LOGP(DSTREAMTEST, LOGL_ERROR, "cannot allocate message\n");
|
||||
return 0;
|
||||
}
|
||||
ptr = msgb_put(msg, strlen(buf));
|
||||
memcpy(ptr, buf, strlen(buf));
|
||||
osmo_stream_server_conn_send(conn, msg);
|
||||
osmo_stream_srv_send(conn, msg);
|
||||
|
||||
LOGP(DSTREAMTEST, LOGL_NOTICE, "message of %d bytes sent\n", msg->len);
|
||||
|
||||
|
@ -119,25 +119,25 @@ int main(void)
|
|||
{
|
||||
struct osmo_fd *kbd_ofd;
|
||||
|
||||
tall_test = talloc_named_const(NULL, 1, "osmo_stream_server_test");
|
||||
tall_test = talloc_named_const(NULL, 1, "osmo_stream_srv_test");
|
||||
|
||||
osmo_init_logging(&osmo_stream_server_test_log_info);
|
||||
osmo_init_logging(&osmo_stream_srv_test_log_info);
|
||||
log_set_log_level(osmo_stderr_target, 1);
|
||||
|
||||
/*
|
||||
* initialize stream server.
|
||||
* initialize stream srv.
|
||||
*/
|
||||
|
||||
server = osmo_stream_server_link_create(tall_test);
|
||||
if (server == NULL) {
|
||||
srv = osmo_stream_srv_link_create(tall_test);
|
||||
if (srv == NULL) {
|
||||
fprintf(stderr, "cannot create client\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
osmo_stream_server_link_set_addr(server, "127.0.0.1");
|
||||
osmo_stream_server_link_set_port(server, 10000);
|
||||
osmo_stream_server_link_set_accept_cb(server, accept_cb);
|
||||
osmo_stream_srv_link_set_addr(srv, "127.0.0.1");
|
||||
osmo_stream_srv_link_set_port(srv, 10000);
|
||||
osmo_stream_srv_link_set_accept_cb(srv, accept_cb);
|
||||
|
||||
if (osmo_stream_server_link_open(server) < 0) {
|
||||
if (osmo_stream_srv_link_open(srv) < 0) {
|
||||
fprintf(stderr, "cannot open client\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
@ -149,7 +149,7 @@ int main(void)
|
|||
}
|
||||
kbd_ofd->fd = STDIN_FILENO;
|
||||
kbd_ofd->when = BSC_FD_READ;
|
||||
kbd_ofd->data = server;
|
||||
kbd_ofd->data = srv;
|
||||
kbd_ofd->cb = kbd_cb;
|
||||
osmo_fd_register(kbd_ofd);
|
||||
|
||||
|
|
|
@ -1,51 +1,51 @@
|
|||
#ifndef _OSMO_STREAM_H_
|
||||
#define _OSMO_STREAM_H_
|
||||
|
||||
struct osmo_stream_server_link;
|
||||
struct osmo_stream_srv_link;
|
||||
|
||||
struct osmo_stream_server_link *osmo_stream_server_link_create(void *ctx);
|
||||
void osmo_stream_server_link_destroy(struct osmo_stream_server_link *link);
|
||||
struct osmo_stream_srv_link *osmo_stream_srv_link_create(void *ctx);
|
||||
void osmo_stream_srv_link_destroy(struct osmo_stream_srv_link *link);
|
||||
|
||||
void osmo_stream_server_link_set_addr(struct osmo_stream_server_link *link, const char *addr);
|
||||
void osmo_stream_server_link_set_port(struct osmo_stream_server_link *link, uint16_t port);
|
||||
void osmo_stream_server_link_set_accept_cb(struct osmo_stream_server_link *link, int (*accept_cb)(struct osmo_stream_server_link *link, int fd));
|
||||
void osmo_stream_server_link_set_data(struct osmo_stream_server_link *link, void *data);
|
||||
void *osmo_stream_server_link_get_data(struct osmo_stream_server_link *link);
|
||||
struct osmo_fd *osmo_stream_server_link_get_ofd(struct osmo_stream_server_link *link);
|
||||
void osmo_stream_srv_link_set_addr(struct osmo_stream_srv_link *link, const char *addr);
|
||||
void osmo_stream_srv_link_set_port(struct osmo_stream_srv_link *link, uint16_t port);
|
||||
void osmo_stream_srv_link_set_accept_cb(struct osmo_stream_srv_link *link, int (*accept_cb)(struct osmo_stream_srv_link *link, int fd));
|
||||
void osmo_stream_srv_link_set_data(struct osmo_stream_srv_link *link, void *data);
|
||||
void *osmo_stream_srv_link_get_data(struct osmo_stream_srv_link *link);
|
||||
struct osmo_fd *osmo_stream_srv_link_get_ofd(struct osmo_stream_srv_link *link);
|
||||
|
||||
int osmo_stream_server_link_open(struct osmo_stream_server_link *link);
|
||||
void osmo_stream_server_link_close(struct osmo_stream_server_link *link);
|
||||
int osmo_stream_srv_link_open(struct osmo_stream_srv_link *link);
|
||||
void osmo_stream_srv_link_close(struct osmo_stream_srv_link *link);
|
||||
|
||||
struct osmo_stream_server_conn;
|
||||
struct osmo_stream_srv;
|
||||
|
||||
struct osmo_stream_server_conn *osmo_stream_server_conn_create(void *ctx, struct osmo_stream_server_link *link, int fd, int (*cb)(struct osmo_stream_server_conn *conn), int (*closed_cb)(struct osmo_stream_server_conn *conn), void *data);
|
||||
void *osmo_stream_server_conn_get_data(struct osmo_stream_server_conn *conn);
|
||||
struct osmo_fd *osmo_stream_server_conn_get_ofd(struct osmo_stream_server_conn *link);
|
||||
void osmo_stream_server_conn_destroy(struct osmo_stream_server_conn *conn);
|
||||
struct osmo_stream_srv *osmo_stream_srv_create(void *ctx, struct osmo_stream_srv_link *link, int fd, int (*cb)(struct osmo_stream_srv *conn), int (*closed_cb)(struct osmo_stream_srv *conn), void *data);
|
||||
void *osmo_stream_srv_get_data(struct osmo_stream_srv *conn);
|
||||
struct osmo_fd *osmo_stream_srv_get_ofd(struct osmo_stream_srv *srv);
|
||||
void osmo_stream_srv_destroy(struct osmo_stream_srv *conn);
|
||||
|
||||
void osmo_stream_server_conn_set_data(struct osmo_stream_server_conn *conn, void *data);
|
||||
void osmo_stream_srv_set_data(struct osmo_stream_srv *conn, void *data);
|
||||
|
||||
void osmo_stream_server_conn_send(struct osmo_stream_server_conn *conn, struct msgb *msg);
|
||||
int osmo_stream_server_conn_recv(struct osmo_stream_server_conn *conn, struct msgb *msg);
|
||||
void osmo_stream_srv_send(struct osmo_stream_srv *conn, struct msgb *msg);
|
||||
int osmo_stream_srv_recv(struct osmo_stream_srv *conn, struct msgb *msg);
|
||||
|
||||
struct osmo_stream_client_conn;
|
||||
struct osmo_stream_cli;
|
||||
|
||||
void osmo_stream_client_conn_set_addr(struct osmo_stream_client_conn *link, const char *addr);
|
||||
void osmo_stream_client_conn_set_port(struct osmo_stream_client_conn *link, uint16_t port);
|
||||
void osmo_stream_client_conn_set_data(struct osmo_stream_client_conn *link, void *data);
|
||||
void osmo_stream_client_conn_set_reconnect_timeout(struct osmo_stream_client_conn *link, int timeout);
|
||||
void *osmo_stream_client_conn_get_data(struct osmo_stream_client_conn *link);
|
||||
struct osmo_fd *osmo_stream_client_conn_get_ofd(struct osmo_stream_client_conn *link);
|
||||
void osmo_stream_client_conn_set_connect_cb(struct osmo_stream_client_conn *link, int (*connect_cb)(struct osmo_stream_client_conn *link));
|
||||
void osmo_stream_client_conn_set_read_cb(struct osmo_stream_client_conn *link, int (*read_cb)(struct osmo_stream_client_conn *link));
|
||||
void osmo_stream_cli_set_addr(struct osmo_stream_cli *cli, const char *addr);
|
||||
void osmo_stream_cli_set_port(struct osmo_stream_cli *cli, uint16_t port);
|
||||
void osmo_stream_cli_set_data(struct osmo_stream_cli *cli, void *data);
|
||||
void osmo_stream_cli_set_reconnect_timeout(struct osmo_stream_cli *cli, int timeout);
|
||||
void *osmo_stream_cli_get_data(struct osmo_stream_cli *cli);
|
||||
struct osmo_fd *osmo_stream_cli_get_ofd(struct osmo_stream_cli *cli);
|
||||
void osmo_stream_cli_set_connect_cb(struct osmo_stream_cli *cli, int (*connect_cb)(struct osmo_stream_cli *cli));
|
||||
void osmo_stream_cli_set_read_cb(struct osmo_stream_cli *cli, int (*read_cb)(struct osmo_stream_cli *cli));
|
||||
|
||||
struct osmo_stream_client_conn *osmo_stream_client_conn_create(void *ctx);
|
||||
void osmo_stream_client_conn_destroy(struct osmo_stream_client_conn *link);
|
||||
struct osmo_stream_cli *osmo_stream_cli_create(void *ctx);
|
||||
void osmo_stream_cli_destroy(struct osmo_stream_cli *cli);
|
||||
|
||||
int osmo_stream_client_conn_open(struct osmo_stream_client_conn *link);
|
||||
void osmo_stream_client_conn_close(struct osmo_stream_client_conn *link);
|
||||
int osmo_stream_cli_open(struct osmo_stream_cli *cli);
|
||||
void osmo_stream_cli_close(struct osmo_stream_cli *cli);
|
||||
|
||||
void osmo_stream_client_conn_send(struct osmo_stream_client_conn *link, struct msgb *msg);
|
||||
int osmo_stream_client_conn_recv(struct osmo_stream_client_conn *conn, struct msgb *msg);
|
||||
void osmo_stream_cli_send(struct osmo_stream_cli *cli, struct msgb *msg);
|
||||
int osmo_stream_cli_recv(struct osmo_stream_cli *conn, struct msgb *msg);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -21,12 +21,12 @@
|
|||
|
||||
static void *abis_ipa_server_tall;
|
||||
|
||||
static int oml_accept_cb(struct osmo_stream_server_link *server, int fd);
|
||||
static int rsl_accept_cb(struct osmo_stream_server_link *server, int fd);
|
||||
static int oml_accept_cb(struct osmo_stream_srv_link *server, int fd);
|
||||
static int rsl_accept_cb(struct osmo_stream_srv_link *server, int fd);
|
||||
|
||||
struct chan_abis_ipa_server {
|
||||
struct osmo_stream_server_link *oml;
|
||||
struct osmo_stream_server_link *rsl;
|
||||
struct osmo_stream_srv_link *oml;
|
||||
struct osmo_stream_srv_link *rsl;
|
||||
|
||||
struct llist_head bts_list;
|
||||
struct llist_head conn_list;
|
||||
|
@ -40,55 +40,55 @@ struct ipa_unit {
|
|||
uint16_t bts_id;
|
||||
};
|
||||
|
||||
struct ipa_conn {
|
||||
struct ipa {
|
||||
struct llist_head head;
|
||||
struct ipa_unit *unit;
|
||||
struct osmo_chan *chan;
|
||||
struct osmo_stream_server_conn *oml;
|
||||
struct osmo_stream_server_conn *rsl;
|
||||
struct osmo_stream_srv *oml;
|
||||
struct osmo_stream_srv *rsl;
|
||||
};
|
||||
|
||||
static int chan_abis_ipa_server_create(struct osmo_chan *chan)
|
||||
{
|
||||
struct chan_abis_ipa_server *c =
|
||||
(struct chan_abis_ipa_server *)chan->data;
|
||||
struct ipa_conn *ipa_conn;
|
||||
struct ipa *ipa;
|
||||
|
||||
/* dummy connection. */
|
||||
ipa_conn = talloc_zero(chan->ctx, struct ipa_conn);
|
||||
if (ipa_conn == NULL)
|
||||
ipa = talloc_zero(chan->ctx, struct ipa);
|
||||
if (ipa == NULL)
|
||||
goto err;
|
||||
|
||||
ipa_conn->chan = chan;
|
||||
ipa->chan = chan;
|
||||
|
||||
c->oml = osmo_stream_server_link_create(abis_ipa_server_tall);
|
||||
c->oml = osmo_stream_srv_link_create(abis_ipa_server_tall);
|
||||
if (c->oml == NULL)
|
||||
goto err_oml;
|
||||
|
||||
/* default address and port for OML. */
|
||||
osmo_stream_server_link_set_addr(c->oml, "0.0.0.0");
|
||||
osmo_stream_server_link_set_port(c->oml, IPA_TCP_PORT_OML);
|
||||
osmo_stream_server_link_set_accept_cb(c->oml, oml_accept_cb);
|
||||
osmo_stream_server_link_set_data(c->oml, ipa_conn);
|
||||
osmo_stream_srv_link_set_addr(c->oml, "0.0.0.0");
|
||||
osmo_stream_srv_link_set_port(c->oml, IPA_TCP_PORT_OML);
|
||||
osmo_stream_srv_link_set_accept_cb(c->oml, oml_accept_cb);
|
||||
osmo_stream_srv_link_set_data(c->oml, ipa);
|
||||
|
||||
c->rsl = osmo_stream_server_link_create(abis_ipa_server_tall);
|
||||
c->rsl = osmo_stream_srv_link_create(abis_ipa_server_tall);
|
||||
if (c->rsl == NULL)
|
||||
goto err_rsl;
|
||||
|
||||
/* default address and port for RSL. */
|
||||
osmo_stream_server_link_set_addr(c->rsl, "0.0.0.0");
|
||||
osmo_stream_server_link_set_port(c->rsl, IPA_TCP_PORT_RSL);
|
||||
osmo_stream_server_link_set_accept_cb(c->rsl, rsl_accept_cb);
|
||||
osmo_stream_server_link_set_data(c->rsl, ipa_conn);
|
||||
osmo_stream_srv_link_set_addr(c->rsl, "0.0.0.0");
|
||||
osmo_stream_srv_link_set_port(c->rsl, IPA_TCP_PORT_RSL);
|
||||
osmo_stream_srv_link_set_accept_cb(c->rsl, rsl_accept_cb);
|
||||
osmo_stream_srv_link_set_data(c->rsl, ipa);
|
||||
|
||||
INIT_LLIST_HEAD(&c->bts_list);
|
||||
INIT_LLIST_HEAD(&c->conn_list);
|
||||
|
||||
return 0;
|
||||
err_rsl:
|
||||
osmo_stream_server_link_destroy(c->oml);
|
||||
osmo_stream_srv_link_destroy(c->oml);
|
||||
err_oml:
|
||||
talloc_free(ipa_conn);
|
||||
talloc_free(ipa);
|
||||
err:
|
||||
return -1;
|
||||
}
|
||||
|
@ -97,10 +97,10 @@ static void chan_abis_ipa_server_destroy(struct osmo_chan *chan)
|
|||
{
|
||||
struct chan_abis_ipa_server *c =
|
||||
(struct chan_abis_ipa_server *)chan->data;
|
||||
struct ipa_conn *ipa_conn =
|
||||
osmo_stream_server_link_get_data(c->oml);
|
||||
struct ipa *ipa =
|
||||
osmo_stream_srv_link_get_data(c->oml);
|
||||
|
||||
talloc_free(ipa_conn);
|
||||
talloc_free(ipa);
|
||||
talloc_free(c->rsl);
|
||||
talloc_free(c->oml);
|
||||
}
|
||||
|
@ -112,18 +112,18 @@ static int chan_abis_ipa_server_open(struct osmo_chan *chan)
|
|||
struct osmo_fd *ofd;
|
||||
int ret, on = 1;
|
||||
|
||||
if (osmo_stream_server_link_open(c->oml) < 0)
|
||||
if (osmo_stream_srv_link_open(c->oml) < 0)
|
||||
goto err;
|
||||
|
||||
ofd = osmo_stream_server_link_get_ofd(c->oml);
|
||||
ofd = osmo_stream_srv_link_get_ofd(c->oml);
|
||||
ret = setsockopt(ofd->fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
|
||||
if (ret < 0)
|
||||
goto err_oml;
|
||||
|
||||
if (osmo_stream_server_link_open(c->rsl) < 0)
|
||||
if (osmo_stream_srv_link_open(c->rsl) < 0)
|
||||
goto err_oml;
|
||||
|
||||
ofd = osmo_stream_server_link_get_ofd(c->rsl);
|
||||
ofd = osmo_stream_srv_link_get_ofd(c->rsl);
|
||||
ret = setsockopt(ofd->fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
|
||||
if (ret < 0)
|
||||
goto err_rsl;
|
||||
|
@ -131,9 +131,9 @@ static int chan_abis_ipa_server_open(struct osmo_chan *chan)
|
|||
return 0;
|
||||
|
||||
err_rsl:
|
||||
osmo_stream_server_link_close(c->rsl);
|
||||
osmo_stream_srv_link_close(c->rsl);
|
||||
err_oml:
|
||||
osmo_stream_server_link_close(c->oml);
|
||||
osmo_stream_srv_link_close(c->oml);
|
||||
err:
|
||||
return -1;
|
||||
}
|
||||
|
@ -143,13 +143,13 @@ static void chan_abis_ipa_server_close(struct osmo_chan *chan)
|
|||
struct chan_abis_ipa_server *c =
|
||||
(struct chan_abis_ipa_server *)chan->data;
|
||||
|
||||
osmo_stream_server_link_close(c->oml);
|
||||
osmo_stream_server_link_close(c->rsl);
|
||||
osmo_stream_srv_link_close(c->oml);
|
||||
osmo_stream_srv_link_close(c->rsl);
|
||||
}
|
||||
|
||||
static int chan_abis_ipa_server_enqueue(struct osmo_chan *c, struct msgb *msg)
|
||||
{
|
||||
osmo_stream_server_conn_send(msg->dst, msg);
|
||||
osmo_stream_srv_send(msg->dst, msg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -159,7 +159,7 @@ osmo_chan_abis_ipa_server_set_oml_addr(struct osmo_chan *c, const char *addr)
|
|||
struct chan_abis_ipa_server *s =
|
||||
(struct chan_abis_ipa_server *)&c->data;
|
||||
|
||||
osmo_stream_server_link_set_addr(s->oml, addr);
|
||||
osmo_stream_srv_link_set_addr(s->oml, addr);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -168,7 +168,7 @@ osmo_chan_abis_ipa_server_set_oml_port(struct osmo_chan *c, uint16_t port)
|
|||
struct chan_abis_ipa_server *s =
|
||||
(struct chan_abis_ipa_server *)&c->data;
|
||||
|
||||
osmo_stream_server_link_set_port(s->oml, port);
|
||||
osmo_stream_srv_link_set_port(s->oml, port);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -177,7 +177,7 @@ osmo_chan_abis_ipa_server_set_rsl_addr(struct osmo_chan *c, const char *addr)
|
|||
struct chan_abis_ipa_server *s =
|
||||
(struct chan_abis_ipa_server *)&c->data;
|
||||
|
||||
osmo_stream_server_link_set_addr(s->rsl, addr);
|
||||
osmo_stream_srv_link_set_addr(s->rsl, addr);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -186,7 +186,7 @@ osmo_chan_abis_ipa_server_set_rsl_port(struct osmo_chan *c, uint16_t port)
|
|||
struct chan_abis_ipa_server *s =
|
||||
(struct chan_abis_ipa_server *)&c->data;
|
||||
|
||||
osmo_stream_server_link_set_port(s->rsl, port);
|
||||
osmo_stream_srv_link_set_port(s->rsl, port);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -199,23 +199,23 @@ osmo_chan_abis_ipa_server_set_cb_signalmsg(struct osmo_chan *c,
|
|||
s->signal_msg = signal_msg;
|
||||
}
|
||||
|
||||
static int oml_read_cb(struct osmo_stream_server_conn *conn);
|
||||
static int oml_read_cb(struct osmo_stream_srv *conn);
|
||||
|
||||
static int oml_accept_cb(struct osmo_stream_server_link *server, int fd)
|
||||
static int oml_accept_cb(struct osmo_stream_srv_link *server, int fd)
|
||||
{
|
||||
struct osmo_stream_server_conn *conn;
|
||||
struct ipa_conn *ipa_conn = osmo_stream_server_link_get_data(server);
|
||||
struct osmo_stream_srv *conn;
|
||||
struct ipa *ipa = osmo_stream_srv_link_get_data(server);
|
||||
struct osmo_fd *ofd;
|
||||
|
||||
conn = osmo_stream_server_conn_create(abis_ipa_server_tall,
|
||||
conn = osmo_stream_srv_create(abis_ipa_server_tall,
|
||||
server, fd,
|
||||
oml_read_cb, NULL, ipa_conn);
|
||||
oml_read_cb, NULL, ipa);
|
||||
if (conn == NULL) {
|
||||
LOGP(DLINP, LOGL_ERROR, "error while creating connection\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ofd = osmo_stream_server_conn_get_ofd(conn);
|
||||
ofd = osmo_stream_srv_get_ofd(conn);
|
||||
|
||||
/* XXX: better use chan_abis_ipa_server_enqueue. */
|
||||
ipaccess_send_id_req(ofd->fd);
|
||||
|
@ -223,23 +223,23 @@ static int oml_accept_cb(struct osmo_stream_server_link *server, int fd)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int rsl_read_cb(struct osmo_stream_server_conn *conn);
|
||||
static int rsl_read_cb(struct osmo_stream_srv *conn);
|
||||
|
||||
static int rsl_accept_cb(struct osmo_stream_server_link *server, int fd)
|
||||
static int rsl_accept_cb(struct osmo_stream_srv_link *server, int fd)
|
||||
{
|
||||
struct osmo_stream_server_conn *conn;
|
||||
struct ipa_conn *ipa_conn = osmo_stream_server_link_get_data(server);
|
||||
struct osmo_stream_srv *conn;
|
||||
struct ipa *ipa = osmo_stream_srv_link_get_data(server);
|
||||
struct osmo_fd *ofd;
|
||||
|
||||
conn = osmo_stream_server_conn_create(abis_ipa_server_tall,
|
||||
conn = osmo_stream_srv_create(abis_ipa_server_tall,
|
||||
server, fd,
|
||||
rsl_read_cb, NULL, ipa_conn);
|
||||
rsl_read_cb, NULL, ipa);
|
||||
if (conn == NULL) {
|
||||
LOGP(DLINP, LOGL_ERROR, "error while creating connection\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
ofd = osmo_stream_server_conn_get_ofd(conn);
|
||||
ofd = osmo_stream_srv_get_ofd(conn);
|
||||
|
||||
/* XXX: better use chan_abis_ipa_server_enqueue. */
|
||||
ipaccess_send_id_req(ofd->fd);
|
||||
|
@ -281,70 +281,70 @@ osmo_chan_abis_ipa_unit_add(struct osmo_chan *c,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct ipa_conn *
|
||||
osmo_ipa_conn_alloc(struct ipa_unit *unit, struct osmo_chan *chan)
|
||||
static struct ipa *
|
||||
osmo_ipa_alloc(struct ipa_unit *unit, struct osmo_chan *chan)
|
||||
{
|
||||
struct ipa_conn *ipa_conn;
|
||||
struct ipa *ipa;
|
||||
|
||||
ipa_conn = talloc_zero(chan->ctx, struct ipa_conn);
|
||||
if (ipa_conn == NULL)
|
||||
ipa = talloc_zero(chan->ctx, struct ipa);
|
||||
if (ipa == NULL)
|
||||
return NULL;
|
||||
|
||||
ipa_conn->unit = unit;
|
||||
ipa_conn->chan = chan;
|
||||
ipa->unit = unit;
|
||||
ipa->chan = chan;
|
||||
|
||||
return ipa_conn;
|
||||
return ipa;
|
||||
}
|
||||
|
||||
static struct ipa_conn *
|
||||
osmo_ipa_conn_add(struct ipa_unit *unit, struct osmo_chan *chan)
|
||||
static struct ipa *
|
||||
osmo_ipa_add(struct ipa_unit *unit, struct osmo_chan *chan)
|
||||
{
|
||||
struct ipa_conn *ipa_conn;
|
||||
struct ipa *ipa;
|
||||
struct chan_abis_ipa_server *s =
|
||||
(struct chan_abis_ipa_server *)chan->data;
|
||||
|
||||
ipa_conn = osmo_ipa_conn_alloc(unit, chan);
|
||||
if (ipa_conn == NULL)
|
||||
ipa = osmo_ipa_alloc(unit, chan);
|
||||
if (ipa == NULL)
|
||||
return NULL;
|
||||
|
||||
llist_add(&ipa_conn->head, &s->conn_list);
|
||||
llist_add(&ipa->head, &s->conn_list);
|
||||
|
||||
return ipa_conn;
|
||||
return ipa;
|
||||
}
|
||||
|
||||
static struct ipa_conn *
|
||||
osmo_ipa_conn_find(struct ipa_unit *unit, struct osmo_chan *chan)
|
||||
static struct ipa *
|
||||
osmo_ipa_find(struct ipa_unit *unit, struct osmo_chan *chan)
|
||||
{
|
||||
struct ipa_conn *ipa_conn;
|
||||
struct ipa *ipa;
|
||||
struct chan_abis_ipa_server *s =
|
||||
(struct chan_abis_ipa_server *)chan->data;
|
||||
|
||||
llist_for_each_entry(ipa_conn, &s->conn_list, head) {
|
||||
if (ipa_conn->unit->site_id == unit->site_id &&
|
||||
ipa_conn->unit->bts_id == unit->bts_id) {
|
||||
return ipa_conn;
|
||||
llist_for_each_entry(ipa, &s->conn_list, head) {
|
||||
if (ipa->unit->site_id == unit->site_id &&
|
||||
ipa->unit->bts_id == unit->bts_id) {
|
||||
return ipa;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
osmo_ipa_conn_put(struct ipa_conn *ipa_conn)
|
||||
osmo_ipa_put(struct ipa *ipa)
|
||||
{
|
||||
llist_del(&ipa_conn->head);
|
||||
osmo_stream_server_conn_destroy(ipa_conn->oml);
|
||||
osmo_stream_server_conn_destroy(ipa_conn->rsl);
|
||||
talloc_free(ipa_conn);
|
||||
llist_del(&ipa->head);
|
||||
osmo_stream_srv_destroy(ipa->oml);
|
||||
osmo_stream_srv_destroy(ipa->rsl);
|
||||
talloc_free(ipa);
|
||||
}
|
||||
|
||||
static int
|
||||
abis_ipa_server_rcvmsg(struct osmo_chan *c,
|
||||
struct osmo_stream_server_conn *conn,
|
||||
struct osmo_stream_srv *conn,
|
||||
struct msgb *msg, int type)
|
||||
{
|
||||
struct tlv_parsed tlvp;
|
||||
uint8_t msg_type = *(msg->l2h);
|
||||
struct osmo_fd *ofd = osmo_stream_server_conn_get_ofd(conn);
|
||||
struct osmo_fd *ofd = osmo_stream_srv_get_ofd(conn);
|
||||
char *unitid;
|
||||
int len, ret;
|
||||
|
||||
|
@ -354,7 +354,7 @@ abis_ipa_server_rcvmsg(struct osmo_chan *c,
|
|||
|
||||
if (msg_type == IPAC_MSGT_ID_RESP) {
|
||||
struct ipa_unit *unit;
|
||||
struct ipa_conn *ipa_conn;
|
||||
struct ipa *ipa;
|
||||
struct ipaccess_unit unit_data;
|
||||
|
||||
DEBUGP(DLMI, "ID_RESP\n");
|
||||
|
@ -399,35 +399,35 @@ abis_ipa_server_rcvmsg(struct osmo_chan *c,
|
|||
unit_data.site_id, unit_data.bts_id,
|
||||
unit_data.trx_id);
|
||||
|
||||
ipa_conn = osmo_ipa_conn_find(unit, c);
|
||||
if (ipa_conn == NULL) {
|
||||
ipa_conn = osmo_ipa_conn_add(unit, c);
|
||||
if (ipa_conn == NULL) {
|
||||
ipa = osmo_ipa_find(unit, c);
|
||||
if (ipa == NULL) {
|
||||
ipa = osmo_ipa_add(unit, c);
|
||||
if (ipa == NULL) {
|
||||
LOGP(DLINP, LOGL_ERROR, "OOM\n");
|
||||
return 0;
|
||||
}
|
||||
osmo_stream_server_conn_set_data(conn, ipa_conn);
|
||||
osmo_stream_srv_set_data(conn, ipa);
|
||||
}
|
||||
|
||||
if (type == CHAN_SIGN_OML) {
|
||||
if (ipa_conn->oml) {
|
||||
if (ipa->oml) {
|
||||
/* link already exists, kill it. */
|
||||
osmo_stream_server_conn_destroy(ipa_conn->oml);
|
||||
osmo_stream_srv_destroy(ipa->oml);
|
||||
return 0;
|
||||
}
|
||||
ipa_conn->oml = conn;
|
||||
ipa->oml = conn;
|
||||
} else if (type == CHAN_SIGN_RSL) {
|
||||
if (!ipa_conn->oml) {
|
||||
if (!ipa->oml) {
|
||||
/* no OML link? Restart from scratch. */
|
||||
osmo_ipa_conn_put(ipa_conn);
|
||||
osmo_ipa_put(ipa);
|
||||
return 0;
|
||||
}
|
||||
if (ipa_conn->rsl) {
|
||||
if (ipa->rsl) {
|
||||
/* RSL link already exists, kill it. */
|
||||
osmo_stream_server_conn_destroy(ipa_conn->rsl);
|
||||
osmo_stream_srv_destroy(ipa->rsl);
|
||||
return 0;
|
||||
}
|
||||
ipa_conn->rsl = conn;
|
||||
ipa->rsl = conn;
|
||||
}
|
||||
ret = 0;
|
||||
} else {
|
||||
|
@ -438,12 +438,12 @@ err:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int read_cb(struct osmo_stream_server_conn *conn, int type)
|
||||
static int read_cb(struct osmo_stream_srv *conn, int type)
|
||||
{
|
||||
int ret;
|
||||
struct msgb *msg;
|
||||
struct osmo_fd *ofd = osmo_stream_server_conn_get_ofd(conn);
|
||||
struct ipa_conn *ipa_conn = osmo_stream_server_conn_get_data(conn);
|
||||
struct osmo_fd *ofd = osmo_stream_srv_get_ofd(conn);
|
||||
struct ipa *ipa = osmo_stream_srv_get_data(conn);
|
||||
struct chan_abis_ipa_server *s;
|
||||
struct ipa_head *hh;
|
||||
|
||||
|
@ -459,27 +459,27 @@ static int read_cb(struct osmo_stream_server_conn *conn, int type)
|
|||
LOGP(DLINP, LOGL_ERROR, "cannot receive message\n");
|
||||
msgb_free(msg);
|
||||
/* not the dummy connection, release it. */
|
||||
if (ipa_conn->unit != NULL)
|
||||
osmo_ipa_conn_put(ipa_conn);
|
||||
if (ipa->unit != NULL)
|
||||
osmo_ipa_put(ipa);
|
||||
return 0;
|
||||
} else if (ret == 0) {
|
||||
/* link has vanished, dead socket. */
|
||||
LOGP(DLINP, LOGL_ERROR, "closed connection\n");
|
||||
msgb_free(msg);
|
||||
if (ipa_conn->unit != NULL)
|
||||
osmo_ipa_conn_put(ipa_conn);
|
||||
if (ipa->unit != NULL)
|
||||
osmo_ipa_put(ipa);
|
||||
return 0;
|
||||
}
|
||||
|
||||
hh = (struct ipa_head *) msg->data;
|
||||
if (hh->proto == IPAC_PROTO_IPACCESS) {
|
||||
abis_ipa_server_rcvmsg(ipa_conn->chan, conn, msg, type);
|
||||
abis_ipa_server_rcvmsg(ipa->chan, conn, msg, type);
|
||||
msgb_free(msg);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
ipa_conn = osmo_stream_server_conn_get_data(conn);
|
||||
if (ipa_conn == NULL) {
|
||||
ipa = osmo_stream_srv_get_data(conn);
|
||||
if (ipa == NULL) {
|
||||
LOGP(DLINP, LOGL_ERROR, "no matching signalling link\n");
|
||||
msgb_free(msg);
|
||||
return -EIO;
|
||||
|
@ -488,20 +488,20 @@ static int read_cb(struct osmo_stream_server_conn *conn, int type)
|
|||
LOGP(DLINP, LOGL_ERROR, "wrong protocol\n");
|
||||
return -EIO;
|
||||
}
|
||||
msg->dst = ipa_conn;
|
||||
msg->dst = ipa;
|
||||
|
||||
s = (struct chan_abis_ipa_server *)ipa_conn->chan->data;
|
||||
s = (struct chan_abis_ipa_server *)ipa->chan->data;
|
||||
s->signal_msg(msg, type);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int oml_read_cb(struct osmo_stream_server_conn *conn)
|
||||
static int oml_read_cb(struct osmo_stream_srv *conn)
|
||||
{
|
||||
return read_cb(conn, CHAN_SIGN_OML);
|
||||
}
|
||||
|
||||
static int rsl_read_cb(struct osmo_stream_server_conn *conn)
|
||||
static int rsl_read_cb(struct osmo_stream_srv *conn)
|
||||
{
|
||||
return read_cb(conn, CHAN_SIGN_RSL);
|
||||
}
|
||||
|
|
319
src/stream.c
319
src/stream.c
|
@ -23,61 +23,61 @@
|
|||
* Client side.
|
||||
*/
|
||||
|
||||
enum osmo_stream_client_conn_state {
|
||||
STREAM_CLIENT_LINK_STATE_NONE = 0,
|
||||
STREAM_CLIENT_LINK_STATE_CONNECTING = 1,
|
||||
STREAM_CLIENT_LINK_STATE_CONNECTED = 2,
|
||||
STREAM_CLIENT_LINK_STATE_MAX
|
||||
enum osmo_stream_cli_state {
|
||||
STREAM_CLI_STATE_NONE = 0,
|
||||
STREAM_CLI_STATE_CONNECTING = 1,
|
||||
STREAM_CLI_STATE_CONNECTED = 2,
|
||||
STREAM_CLI_STATE_MAX
|
||||
};
|
||||
|
||||
#define OSMO_STREAM_CLIENT_F_RECONFIG (1 << 0)
|
||||
#define OSMO_STREAM_CLI_F_RECONF (1 << 0)
|
||||
|
||||
struct osmo_stream_client_conn {
|
||||
struct osmo_stream_cli {
|
||||
struct osmo_fd ofd;
|
||||
struct llist_head tx_queue;
|
||||
struct osmo_timer_list timer;
|
||||
enum osmo_stream_client_conn_state state;
|
||||
enum osmo_stream_cli_state state;
|
||||
const char *addr;
|
||||
uint16_t port;
|
||||
int (*connect_cb)(struct osmo_stream_client_conn *link);
|
||||
int (*read_cb)(struct osmo_stream_client_conn *link);
|
||||
int (*write_cb)(struct osmo_stream_client_conn *link);
|
||||
int (*connect_cb)(struct osmo_stream_cli *srv);
|
||||
int (*read_cb)(struct osmo_stream_cli *srv);
|
||||
int (*write_cb)(struct osmo_stream_cli *srv);
|
||||
void *data;
|
||||
int flags;
|
||||
int reconnect_timeout;
|
||||
};
|
||||
|
||||
void osmo_stream_client_conn_close(struct osmo_stream_client_conn *link);
|
||||
void osmo_stream_cli_close(struct osmo_stream_cli *cli);
|
||||
|
||||
static void osmo_stream_client_reconnect(struct osmo_stream_client_conn *link)
|
||||
static void osmo_stream_cli_reconnect(struct osmo_stream_cli *cli)
|
||||
{
|
||||
if (link->reconnect_timeout < 0) {
|
||||
if (cli->reconnect_timeout < 0) {
|
||||
LOGP(DLINP, LOGL_DEBUG, "not reconnecting, disabled.\n");
|
||||
return;
|
||||
}
|
||||
LOGP(DLINP, LOGL_DEBUG, "connection closed\n");
|
||||
osmo_stream_client_conn_close(link);
|
||||
osmo_stream_cli_close(cli);
|
||||
LOGP(DLINP, LOGL_DEBUG, "retrying in %d seconds...\n",
|
||||
link->reconnect_timeout);
|
||||
osmo_timer_schedule(&link->timer, link->reconnect_timeout, 0);
|
||||
link->state = STREAM_CLIENT_LINK_STATE_CONNECTING;
|
||||
cli->reconnect_timeout);
|
||||
osmo_timer_schedule(&cli->timer, cli->reconnect_timeout, 0);
|
||||
cli->state = STREAM_CLI_STATE_CONNECTING;
|
||||
}
|
||||
|
||||
void osmo_stream_client_conn_close(struct osmo_stream_client_conn *link)
|
||||
void osmo_stream_cli_close(struct osmo_stream_cli *cli)
|
||||
{
|
||||
osmo_fd_unregister(&link->ofd);
|
||||
close(link->ofd.fd);
|
||||
osmo_fd_unregister(&cli->ofd);
|
||||
close(cli->ofd.fd);
|
||||
}
|
||||
|
||||
static void osmo_stream_client_read(struct osmo_stream_client_conn *link)
|
||||
static void osmo_stream_cli_read(struct osmo_stream_cli *cli)
|
||||
{
|
||||
LOGP(DLINP, LOGL_DEBUG, "message received\n");
|
||||
|
||||
if (link->read_cb)
|
||||
link->read_cb(link);
|
||||
if (cli->read_cb)
|
||||
cli->read_cb(cli);
|
||||
}
|
||||
|
||||
static int osmo_stream_client_write(struct osmo_stream_client_conn *link)
|
||||
static int osmo_stream_cli_write(struct osmo_stream_cli *cli)
|
||||
{
|
||||
struct msgb *msg;
|
||||
struct llist_head *lh;
|
||||
|
@ -85,23 +85,23 @@ static int osmo_stream_client_write(struct osmo_stream_client_conn *link)
|
|||
|
||||
LOGP(DLINP, LOGL_DEBUG, "sending data\n");
|
||||
|
||||
if (llist_empty(&link->tx_queue)) {
|
||||
link->ofd.when &= ~BSC_FD_WRITE;
|
||||
if (llist_empty(&cli->tx_queue)) {
|
||||
cli->ofd.when &= ~BSC_FD_WRITE;
|
||||
return 0;
|
||||
}
|
||||
lh = link->tx_queue.next;
|
||||
lh = cli->tx_queue.next;
|
||||
llist_del(lh);
|
||||
msg = llist_entry(lh, struct msgb, list);
|
||||
|
||||
if (link->state == STREAM_CLIENT_LINK_STATE_CONNECTING) {
|
||||
if (cli->state == STREAM_CLI_STATE_CONNECTING) {
|
||||
LOGP(DLINP, LOGL_ERROR, "not connected, dropping data!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = send(link->ofd.fd, msg->data, msg->len, 0);
|
||||
ret = send(cli->ofd.fd, msg->data, msg->len, 0);
|
||||
if (ret < 0) {
|
||||
if (errno == EPIPE || errno == ENOTCONN) {
|
||||
osmo_stream_client_reconnect(link);
|
||||
osmo_stream_cli_reconnect(cli);
|
||||
}
|
||||
LOGP(DLINP, LOGL_ERROR, "error to send\n");
|
||||
}
|
||||
|
@ -109,33 +109,33 @@ static int osmo_stream_client_write(struct osmo_stream_client_conn *link)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int osmo_stream_client_fd_cb(struct osmo_fd *ofd, unsigned int what)
|
||||
static int osmo_stream_cli_fd_cb(struct osmo_fd *ofd, unsigned int what)
|
||||
{
|
||||
struct osmo_stream_client_conn *link = ofd->data;
|
||||
struct osmo_stream_cli *cli = ofd->data;
|
||||
int error, ret;
|
||||
socklen_t len = sizeof(error);
|
||||
|
||||
switch(link->state) {
|
||||
case STREAM_CLIENT_LINK_STATE_CONNECTING:
|
||||
switch(cli->state) {
|
||||
case STREAM_CLI_STATE_CONNECTING:
|
||||
ret = getsockopt(ofd->fd, SOL_SOCKET, SO_ERROR, &error, &len);
|
||||
if (ret >= 0 && error > 0) {
|
||||
osmo_stream_client_reconnect(link);
|
||||
osmo_stream_cli_reconnect(cli);
|
||||
return 0;
|
||||
}
|
||||
ofd->when &= ~BSC_FD_WRITE;
|
||||
LOGP(DLINP, LOGL_DEBUG, "connection done.\n");
|
||||
link->state = STREAM_CLIENT_LINK_STATE_CONNECTED;
|
||||
if (link->connect_cb)
|
||||
link->connect_cb(link);
|
||||
cli->state = STREAM_CLI_STATE_CONNECTED;
|
||||
if (cli->connect_cb)
|
||||
cli->connect_cb(cli);
|
||||
break;
|
||||
case STREAM_CLIENT_LINK_STATE_CONNECTED:
|
||||
case STREAM_CLI_STATE_CONNECTED:
|
||||
if (what & BSC_FD_READ) {
|
||||
LOGP(DLINP, LOGL_DEBUG, "connected read\n");
|
||||
osmo_stream_client_read(link);
|
||||
osmo_stream_cli_read(cli);
|
||||
}
|
||||
if (what & BSC_FD_WRITE) {
|
||||
LOGP(DLINP, LOGL_DEBUG, "connected write\n");
|
||||
osmo_stream_client_write(link);
|
||||
osmo_stream_cli_write(cli);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -144,156 +144,151 @@ static int osmo_stream_client_fd_cb(struct osmo_fd *ofd, unsigned int what)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void link_timer_cb(void *data);
|
||||
static void cli_timer_cb(void *data);
|
||||
|
||||
struct osmo_stream_client_conn *osmo_stream_client_conn_create(void *ctx)
|
||||
struct osmo_stream_cli *osmo_stream_cli_create(void *ctx)
|
||||
{
|
||||
struct osmo_stream_client_conn *link;
|
||||
struct osmo_stream_cli *cli;
|
||||
|
||||
link = talloc_zero(ctx, struct osmo_stream_client_conn);
|
||||
if (!link)
|
||||
cli = talloc_zero(ctx, struct osmo_stream_cli);
|
||||
if (!cli)
|
||||
return NULL;
|
||||
|
||||
link->ofd.fd = -1;
|
||||
link->ofd.when |= BSC_FD_READ | BSC_FD_WRITE;
|
||||
link->ofd.priv_nr = 0; /* XXX */
|
||||
link->ofd.cb = osmo_stream_client_fd_cb;
|
||||
link->ofd.data = link;
|
||||
link->state = STREAM_CLIENT_LINK_STATE_CONNECTING;
|
||||
link->timer.cb = link_timer_cb;
|
||||
link->timer.data = link;
|
||||
link->reconnect_timeout = 5; /* default is 5 seconds. */
|
||||
INIT_LLIST_HEAD(&link->tx_queue);
|
||||
cli->ofd.fd = -1;
|
||||
cli->ofd.when |= BSC_FD_READ | BSC_FD_WRITE;
|
||||
cli->ofd.priv_nr = 0; /* XXX */
|
||||
cli->ofd.cb = osmo_stream_cli_fd_cb;
|
||||
cli->ofd.data = cli;
|
||||
cli->state = STREAM_CLI_STATE_CONNECTING;
|
||||
cli->timer.cb = cli_timer_cb;
|
||||
cli->timer.data = link;
|
||||
cli->reconnect_timeout = 5; /* default is 5 seconds. */
|
||||
INIT_LLIST_HEAD(&cli->tx_queue);
|
||||
|
||||
return link;
|
||||
return cli;
|
||||
}
|
||||
|
||||
void
|
||||
osmo_stream_client_conn_set_addr(struct osmo_stream_client_conn *link,
|
||||
const char *addr)
|
||||
osmo_stream_cli_set_addr(struct osmo_stream_cli *cli, const char *addr)
|
||||
{
|
||||
link->addr = talloc_strdup(link, addr);
|
||||
link->flags |= OSMO_STREAM_CLIENT_F_RECONFIG;
|
||||
cli->addr = talloc_strdup(cli, addr);
|
||||
cli->flags |= OSMO_STREAM_CLI_F_RECONF;
|
||||
}
|
||||
|
||||
void
|
||||
osmo_stream_client_conn_set_port(struct osmo_stream_client_conn *link,
|
||||
uint16_t port)
|
||||
osmo_stream_cli_set_port(struct osmo_stream_cli *cli, uint16_t port)
|
||||
{
|
||||
link->port = port;
|
||||
link->flags |= OSMO_STREAM_CLIENT_F_RECONFIG;
|
||||
}
|
||||
|
||||
void osmo_stream_client_conn_set_reconnect_timeout(
|
||||
struct osmo_stream_client_conn *link, int timeout)
|
||||
{
|
||||
link->reconnect_timeout = timeout;
|
||||
cli->port = port;
|
||||
cli->flags |= OSMO_STREAM_CLI_F_RECONF;
|
||||
}
|
||||
|
||||
void
|
||||
osmo_stream_client_conn_set_data(struct osmo_stream_client_conn *link,
|
||||
void *data)
|
||||
osmo_stream_cli_set_reconnect_timeout(struct osmo_stream_cli *cli, int timeout)
|
||||
{
|
||||
link->data = data;
|
||||
cli->reconnect_timeout = timeout;
|
||||
}
|
||||
|
||||
void *osmo_stream_client_conn_get_data(struct osmo_stream_client_conn *link)
|
||||
void
|
||||
osmo_stream_cli_set_data(struct osmo_stream_cli *cli, void *data)
|
||||
{
|
||||
return link->data;
|
||||
cli->data = data;
|
||||
}
|
||||
|
||||
void *osmo_stream_cli_get_data(struct osmo_stream_cli *cli)
|
||||
{
|
||||
return cli->data;
|
||||
}
|
||||
|
||||
struct osmo_fd *
|
||||
osmo_stream_client_conn_get_ofd(struct osmo_stream_client_conn *link)
|
||||
osmo_stream_cli_get_ofd(struct osmo_stream_cli *cli)
|
||||
{
|
||||
return &link->ofd;
|
||||
return &cli->ofd;
|
||||
}
|
||||
|
||||
void
|
||||
osmo_stream_client_conn_set_connect_cb(struct osmo_stream_client_conn *link,
|
||||
int (*connect_cb)(struct osmo_stream_client_conn *link))
|
||||
osmo_stream_cli_set_connect_cb(struct osmo_stream_cli *cli,
|
||||
int (*connect_cb)(struct osmo_stream_cli *cli))
|
||||
{
|
||||
link->connect_cb = connect_cb;
|
||||
cli->connect_cb = connect_cb;
|
||||
}
|
||||
|
||||
void
|
||||
osmo_stream_client_conn_set_read_cb(struct osmo_stream_client_conn *link,
|
||||
int (*read_cb)(struct osmo_stream_client_conn *link))
|
||||
osmo_stream_cli_set_read_cb(struct osmo_stream_cli *cli,
|
||||
int (*read_cb)(struct osmo_stream_cli *cli))
|
||||
{
|
||||
link->read_cb = read_cb;
|
||||
cli->read_cb = read_cb;
|
||||
}
|
||||
|
||||
void osmo_stream_client_conn_destroy(struct osmo_stream_client_conn *link)
|
||||
void osmo_stream_cli_destroy(struct osmo_stream_cli *cli)
|
||||
{
|
||||
talloc_free(link);
|
||||
}
|
||||
|
||||
int osmo_stream_client_conn_open(struct osmo_stream_client_conn *link)
|
||||
int osmo_stream_cli_open(struct osmo_stream_cli *cli)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* we are reconfiguring this socket, close existing first. */
|
||||
if ((link->flags & OSMO_STREAM_CLIENT_F_RECONFIG) && link->ofd.fd >= 0)
|
||||
osmo_stream_client_conn_close(link);
|
||||
if ((cli->flags & OSMO_STREAM_CLI_F_RECONF) && cli->ofd.fd >= 0)
|
||||
osmo_stream_cli_close(cli);
|
||||
|
||||
link->flags &= ~OSMO_STREAM_CLIENT_F_RECONFIG;
|
||||
cli->flags &= ~OSMO_STREAM_CLI_F_RECONF;
|
||||
|
||||
ret = osmo_sock_init(AF_INET, SOCK_STREAM, IPPROTO_TCP,
|
||||
link->addr, link->port,
|
||||
cli->addr, cli->port,
|
||||
OSMO_SOCK_F_CONNECT|OSMO_SOCK_F_NONBLOCK);
|
||||
if (ret < 0) {
|
||||
if (errno != EINPROGRESS)
|
||||
return ret;
|
||||
}
|
||||
link->ofd.fd = ret;
|
||||
if (osmo_fd_register(&link->ofd) < 0) {
|
||||
cli->ofd.fd = ret;
|
||||
if (osmo_fd_register(&cli->ofd) < 0) {
|
||||
close(ret);
|
||||
return -EIO;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void link_timer_cb(void *data)
|
||||
static void cli_timer_cb(void *data)
|
||||
{
|
||||
struct osmo_stream_client_conn *link = data;
|
||||
struct osmo_stream_cli *cli = data;
|
||||
|
||||
LOGP(DLINP, LOGL_DEBUG, "reconnecting.\n");
|
||||
|
||||
switch(link->state) {
|
||||
case STREAM_CLIENT_LINK_STATE_CONNECTING:
|
||||
osmo_stream_client_conn_open(link);
|
||||
switch(cli->state) {
|
||||
case STREAM_CLI_STATE_CONNECTING:
|
||||
osmo_stream_cli_open(cli);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void osmo_stream_client_conn_send(struct osmo_stream_client_conn *link,
|
||||
struct msgb *msg)
|
||||
void osmo_stream_cli_send(struct osmo_stream_cli *cli, struct msgb *msg)
|
||||
{
|
||||
msgb_enqueue(&link->tx_queue, msg);
|
||||
link->ofd.when |= BSC_FD_WRITE;
|
||||
msgb_enqueue(&cli->tx_queue, msg);
|
||||
cli->ofd.when |= BSC_FD_WRITE;
|
||||
}
|
||||
|
||||
int osmo_stream_client_conn_recv(struct osmo_stream_client_conn *link,
|
||||
struct msgb *msg)
|
||||
int osmo_stream_cli_recv(struct osmo_stream_cli *cli, struct msgb *msg)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = recv(link->ofd.fd, msg->data, msg->data_len, 0);
|
||||
ret = recv(cli->ofd.fd, msg->data, msg->data_len, 0);
|
||||
if (ret < 0) {
|
||||
if (errno == EPIPE || errno == ECONNRESET) {
|
||||
LOGP(DLINP, LOGL_ERROR,
|
||||
"lost connection with server\n");
|
||||
"lost connection with srv\n");
|
||||
}
|
||||
osmo_stream_client_reconnect(link);
|
||||
osmo_stream_cli_reconnect(cli);
|
||||
return ret;
|
||||
} else if (ret == 0) {
|
||||
LOGP(DLINP, LOGL_ERROR, "connection closed with server\n");
|
||||
osmo_stream_client_reconnect(link);
|
||||
LOGP(DLINP, LOGL_ERROR, "connection closed with srv\n");
|
||||
osmo_stream_cli_reconnect(cli);
|
||||
return ret;
|
||||
}
|
||||
msgb_put(msg, ret);
|
||||
LOGP(DLINP, LOGL_DEBUG, "received %d bytes from server\n", ret);
|
||||
LOGP(DLINP, LOGL_DEBUG, "received %d bytes from srv\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -301,23 +296,23 @@ int osmo_stream_client_conn_recv(struct osmo_stream_client_conn *link,
|
|||
* Server side.
|
||||
*/
|
||||
|
||||
#define OSMO_STREAM_SERVER_F_RECONFIG (1 << 0)
|
||||
#define OSMO_STREAM_SRV_F_RECONF (1 << 0)
|
||||
|
||||
struct osmo_stream_server_link {
|
||||
struct osmo_stream_srv_link {
|
||||
struct osmo_fd ofd;
|
||||
const char *addr;
|
||||
uint16_t port;
|
||||
int (*accept_cb)(struct osmo_stream_server_link *link, int fd);
|
||||
int (*accept_cb)(struct osmo_stream_srv_link *srv, int fd);
|
||||
void *data;
|
||||
int flags;
|
||||
};
|
||||
|
||||
static int osmo_stream_server_fd_cb(struct osmo_fd *ofd, unsigned int what)
|
||||
static int osmo_stream_srv_fd_cb(struct osmo_fd *ofd, unsigned int what)
|
||||
{
|
||||
int ret;
|
||||
struct sockaddr_in sa;
|
||||
socklen_t sa_len = sizeof(sa);
|
||||
struct osmo_stream_server_link *link = ofd->data;
|
||||
struct osmo_stream_srv_link *link = ofd->data;
|
||||
|
||||
ret = accept(ofd->fd, (struct sockaddr *)&sa, &sa_len);
|
||||
if (ret < 0) {
|
||||
|
@ -334,75 +329,75 @@ static int osmo_stream_server_fd_cb(struct osmo_fd *ofd, unsigned int what)
|
|||
return 0;
|
||||
}
|
||||
|
||||
struct osmo_stream_server_link *osmo_stream_server_link_create(void *ctx)
|
||||
struct osmo_stream_srv_link *osmo_stream_srv_link_create(void *ctx)
|
||||
{
|
||||
struct osmo_stream_server_link *link;
|
||||
struct osmo_stream_srv_link *link;
|
||||
|
||||
link = talloc_zero(ctx, struct osmo_stream_server_link);
|
||||
link = talloc_zero(ctx, struct osmo_stream_srv_link);
|
||||
if (!link)
|
||||
return NULL;
|
||||
|
||||
link->ofd.fd = -1;
|
||||
link->ofd.when |= BSC_FD_READ | BSC_FD_WRITE;
|
||||
link->ofd.cb = osmo_stream_server_fd_cb;
|
||||
link->ofd.cb = osmo_stream_srv_fd_cb;
|
||||
link->ofd.data = link;
|
||||
|
||||
return link;
|
||||
}
|
||||
|
||||
void osmo_stream_server_link_set_addr(struct osmo_stream_server_link *link,
|
||||
void osmo_stream_srv_link_set_addr(struct osmo_stream_srv_link *link,
|
||||
const char *addr)
|
||||
{
|
||||
link->addr = talloc_strdup(link, addr);
|
||||
link->flags |= OSMO_STREAM_SERVER_F_RECONFIG;
|
||||
link->flags |= OSMO_STREAM_SRV_F_RECONF;
|
||||
}
|
||||
|
||||
void osmo_stream_server_link_set_port(struct osmo_stream_server_link *link,
|
||||
void osmo_stream_srv_link_set_port(struct osmo_stream_srv_link *link,
|
||||
uint16_t port)
|
||||
{
|
||||
link->port = port;
|
||||
link->flags |= OSMO_STREAM_SERVER_F_RECONFIG;
|
||||
link->flags |= OSMO_STREAM_SRV_F_RECONF;
|
||||
}
|
||||
|
||||
void
|
||||
osmo_stream_server_link_set_data(struct osmo_stream_server_link *link,
|
||||
osmo_stream_srv_link_set_data(struct osmo_stream_srv_link *link,
|
||||
void *data)
|
||||
{
|
||||
link->data = data;
|
||||
}
|
||||
|
||||
void *osmo_stream_server_link_get_data(struct osmo_stream_server_link *link)
|
||||
void *osmo_stream_srv_link_get_data(struct osmo_stream_srv_link *link)
|
||||
{
|
||||
return link->data;
|
||||
}
|
||||
|
||||
struct osmo_fd *
|
||||
osmo_stream_server_link_get_ofd(struct osmo_stream_server_link *link)
|
||||
osmo_stream_srv_link_get_ofd(struct osmo_stream_srv_link *link)
|
||||
{
|
||||
return &link->ofd;
|
||||
}
|
||||
|
||||
void osmo_stream_server_link_set_accept_cb(struct osmo_stream_server_link *link,
|
||||
int (*accept_cb)(struct osmo_stream_server_link *link, int fd))
|
||||
void osmo_stream_srv_link_set_accept_cb(struct osmo_stream_srv_link *link,
|
||||
int (*accept_cb)(struct osmo_stream_srv_link *link, int fd))
|
||||
|
||||
{
|
||||
link->accept_cb = accept_cb;
|
||||
}
|
||||
|
||||
void osmo_stream_server_link_destroy(struct osmo_stream_server_link *link)
|
||||
void osmo_stream_srv_link_destroy(struct osmo_stream_srv_link *link)
|
||||
{
|
||||
talloc_free(link);
|
||||
}
|
||||
|
||||
int osmo_stream_server_link_open(struct osmo_stream_server_link *link)
|
||||
int osmo_stream_srv_link_open(struct osmo_stream_srv_link *link)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* we are reconfiguring this socket, close existing first. */
|
||||
if ((link->flags & OSMO_STREAM_SERVER_F_RECONFIG) && link->ofd.fd >= 0)
|
||||
osmo_stream_server_link_close(link);
|
||||
if ((link->flags & OSMO_STREAM_SRV_F_RECONF) && link->ofd.fd >= 0)
|
||||
osmo_stream_srv_link_close(link);
|
||||
|
||||
link->flags &= ~OSMO_STREAM_SERVER_F_RECONFIG;
|
||||
link->flags &= ~OSMO_STREAM_SRV_F_RECONF;
|
||||
|
||||
ret = osmo_sock_init(AF_INET, SOCK_STREAM, IPPROTO_TCP,
|
||||
link->addr, link->port, OSMO_SOCK_F_BIND);
|
||||
|
@ -417,22 +412,22 @@ int osmo_stream_server_link_open(struct osmo_stream_server_link *link)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void osmo_stream_server_link_close(struct osmo_stream_server_link *link)
|
||||
void osmo_stream_srv_link_close(struct osmo_stream_srv_link *link)
|
||||
{
|
||||
osmo_fd_unregister(&link->ofd);
|
||||
close(link->ofd.fd);
|
||||
}
|
||||
|
||||
struct osmo_stream_server_conn {
|
||||
struct osmo_stream_server_link *server;
|
||||
struct osmo_stream_srv {
|
||||
struct osmo_stream_srv_link *srv;
|
||||
struct osmo_fd ofd;
|
||||
struct llist_head tx_queue;
|
||||
int (*closed_cb)(struct osmo_stream_server_conn *peer);
|
||||
int (*cb)(struct osmo_stream_server_conn *peer);
|
||||
int (*closed_cb)(struct osmo_stream_srv *peer);
|
||||
int (*cb)(struct osmo_stream_srv *peer);
|
||||
void *data;
|
||||
};
|
||||
|
||||
static void osmo_stream_server_conn_read(struct osmo_stream_server_conn *conn)
|
||||
static void osmo_stream_srv_read(struct osmo_stream_srv *conn)
|
||||
{
|
||||
LOGP(DLINP, LOGL_DEBUG, "message received\n");
|
||||
|
||||
|
@ -442,7 +437,7 @@ static void osmo_stream_server_conn_read(struct osmo_stream_server_conn *conn)
|
|||
return;
|
||||
}
|
||||
|
||||
static void osmo_stream_server_conn_write(struct osmo_stream_server_conn *conn)
|
||||
static void osmo_stream_srv_write(struct osmo_stream_srv *conn)
|
||||
{
|
||||
struct msgb *msg;
|
||||
struct llist_head *lh;
|
||||
|
@ -465,37 +460,37 @@ static void osmo_stream_server_conn_write(struct osmo_stream_server_conn *conn)
|
|||
msgb_free(msg);
|
||||
}
|
||||
|
||||
static int osmo_stream_server_conn_cb(struct osmo_fd *ofd, unsigned int what)
|
||||
static int osmo_stream_srv_cb(struct osmo_fd *ofd, unsigned int what)
|
||||
{
|
||||
struct osmo_stream_server_conn *conn = ofd->data;
|
||||
struct osmo_stream_srv *conn = ofd->data;
|
||||
|
||||
LOGP(DLINP, LOGL_DEBUG, "connected read/write\n");
|
||||
if (what & BSC_FD_READ)
|
||||
osmo_stream_server_conn_read(conn);
|
||||
osmo_stream_srv_read(conn);
|
||||
if (what & BSC_FD_WRITE)
|
||||
osmo_stream_server_conn_write(conn);
|
||||
osmo_stream_srv_write(conn);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct osmo_stream_server_conn *
|
||||
osmo_stream_server_conn_create(void *ctx, struct osmo_stream_server_link *link,
|
||||
struct osmo_stream_srv *
|
||||
osmo_stream_srv_create(void *ctx, struct osmo_stream_srv_link *link,
|
||||
int fd,
|
||||
int (*cb)(struct osmo_stream_server_conn *conn),
|
||||
int (*closed_cb)(struct osmo_stream_server_conn *conn), void *data)
|
||||
int (*cb)(struct osmo_stream_srv *conn),
|
||||
int (*closed_cb)(struct osmo_stream_srv *conn), void *data)
|
||||
{
|
||||
struct osmo_stream_server_conn *conn;
|
||||
struct osmo_stream_srv *conn;
|
||||
|
||||
conn = talloc_zero(ctx, struct osmo_stream_server_conn);
|
||||
conn = talloc_zero(ctx, struct osmo_stream_srv);
|
||||
if (conn == NULL) {
|
||||
LOGP(DLINP, LOGL_ERROR, "cannot allocate new peer in server, "
|
||||
LOGP(DLINP, LOGL_ERROR, "cannot allocate new peer in srv, "
|
||||
"reason=`%s'\n", strerror(errno));
|
||||
return NULL;
|
||||
}
|
||||
conn->server = link;
|
||||
conn->srv = link;
|
||||
conn->ofd.fd = fd;
|
||||
conn->ofd.data = conn;
|
||||
conn->ofd.cb = osmo_stream_server_conn_cb;
|
||||
conn->ofd.cb = osmo_stream_srv_cb;
|
||||
conn->ofd.when = BSC_FD_READ;
|
||||
conn->cb = cb;
|
||||
conn->closed_cb = closed_cb;
|
||||
|
@ -511,24 +506,24 @@ osmo_stream_server_conn_create(void *ctx, struct osmo_stream_server_link *link,
|
|||
}
|
||||
|
||||
void
|
||||
osmo_stream_server_conn_set_data(struct osmo_stream_server_conn *conn,
|
||||
osmo_stream_srv_set_data(struct osmo_stream_srv *conn,
|
||||
void *data)
|
||||
{
|
||||
conn->data = data;
|
||||
}
|
||||
|
||||
void *osmo_stream_server_conn_get_data(struct osmo_stream_server_conn *link)
|
||||
void *osmo_stream_srv_get_data(struct osmo_stream_srv *link)
|
||||
{
|
||||
return link->data;
|
||||
}
|
||||
|
||||
struct osmo_fd *
|
||||
osmo_stream_server_conn_get_ofd(struct osmo_stream_server_conn *link)
|
||||
osmo_stream_srv_get_ofd(struct osmo_stream_srv *link)
|
||||
{
|
||||
return &link->ofd;
|
||||
}
|
||||
|
||||
void osmo_stream_server_conn_destroy(struct osmo_stream_server_conn *conn)
|
||||
void osmo_stream_srv_destroy(struct osmo_stream_srv *conn)
|
||||
{
|
||||
close(conn->ofd.fd);
|
||||
osmo_fd_unregister(&conn->ofd);
|
||||
|
@ -537,15 +532,13 @@ void osmo_stream_server_conn_destroy(struct osmo_stream_server_conn *conn)
|
|||
talloc_free(conn);
|
||||
}
|
||||
|
||||
void osmo_stream_server_conn_send(struct osmo_stream_server_conn *conn,
|
||||
struct msgb *msg)
|
||||
void osmo_stream_srv_send(struct osmo_stream_srv *conn, struct msgb *msg)
|
||||
{
|
||||
msgb_enqueue(&conn->tx_queue, msg);
|
||||
conn->ofd.when |= BSC_FD_WRITE;
|
||||
}
|
||||
|
||||
int osmo_stream_server_conn_recv(struct osmo_stream_server_conn *conn,
|
||||
struct msgb *msg)
|
||||
int osmo_stream_srv_recv(struct osmo_stream_srv *conn, struct msgb *msg)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
@ -553,11 +546,11 @@ int osmo_stream_server_conn_recv(struct osmo_stream_server_conn *conn,
|
|||
if (ret < 0) {
|
||||
if (errno == EPIPE || errno == ECONNRESET) {
|
||||
LOGP(DLINP, LOGL_ERROR,
|
||||
"lost connection with server\n");
|
||||
"lost connection with srv\n");
|
||||
}
|
||||
return ret;
|
||||
} else if (ret == 0) {
|
||||
LOGP(DLINP, LOGL_ERROR, "connection closed with server\n");
|
||||
LOGP(DLINP, LOGL_ERROR, "connection closed with srv\n");
|
||||
return ret;
|
||||
}
|
||||
msgb_put(msg, ret);
|
||||
|
|
Loading…
Reference in New Issue