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:
Pablo Neira Ayuso 2012-08-15 21:14:38 +02:00
parent ad2e9d637e
commit cee5fb36da
7 changed files with 382 additions and 389 deletions

View File

@ -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) {

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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

View File

@ -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);
}

View File

@ -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);