Add proto arg to patty_ax25_sock_new()
Other changes: * Remove proto arg from patty_ax25_sock_send() and patty_ax25_sock_write(); instead, use the proto member of patty_ax25_sock
This commit is contained in:
parent
085ac4e650
commit
c6aac035e1
7 changed files with 30 additions and 22 deletions
|
@ -19,6 +19,7 @@ enum patty_ax25_call {
|
|||
*/
|
||||
typedef struct _patty_ax25_call_socket_request {
|
||||
int opts;
|
||||
int proto;
|
||||
} patty_ax25_call_socket_request;
|
||||
|
||||
typedef struct _patty_ax25_response_socket {
|
||||
|
@ -29,6 +30,7 @@ typedef struct _patty_ax25_response_socket {
|
|||
|
||||
int patty_ax25_call_socket(int server,
|
||||
int opts,
|
||||
int proto,
|
||||
char *path,
|
||||
size_t len);
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ typedef struct _patty_ax25_sock {
|
|||
enum patty_ax25_sock_opts opts;
|
||||
enum patty_ax25_sock_status status;
|
||||
enum patty_ax25_sock_mode mode;
|
||||
enum patty_ax25_proto proto;
|
||||
|
||||
time_t timer_ack,
|
||||
timer_response,
|
||||
|
@ -65,7 +66,8 @@ typedef struct _patty_ax25_sock {
|
|||
PATTY_AX25_SOCK_CONTROL_SABME(sock, flag): \
|
||||
PATTY_AX25_SOCK_CONTROL_SABM(sock, flag))
|
||||
|
||||
patty_ax25_sock *patty_ax25_sock_new(enum patty_ax25_sock_opts opts);
|
||||
patty_ax25_sock *patty_ax25_sock_new(enum patty_ax25_sock_opts opts,
|
||||
enum patty_ax25_proto proto);
|
||||
|
||||
void patty_ax25_sock_reset(patty_ax25_sock *sock);
|
||||
|
||||
|
@ -73,9 +75,11 @@ void patty_ax25_sock_destroy(patty_ax25_sock *sock);
|
|||
|
||||
char *patty_ax25_sock_pty(patty_ax25_sock *sock);
|
||||
|
||||
void patty_ax25_sock_bind_if(patty_ax25_sock *sock,
|
||||
patty_ax25_if *iface);
|
||||
|
||||
ssize_t patty_ax25_sock_send(patty_ax25_sock *sock,
|
||||
uint16_t control,
|
||||
uint8_t proto,
|
||||
void *info,
|
||||
size_t infolen);
|
||||
|
||||
|
@ -86,7 +90,6 @@ ssize_t patty_ax25_sock_send_sabme(patty_ax25_sock *sock, int poll);
|
|||
ssize_t patty_ax25_sock_send_disc(patty_ax25_sock *sock, int poll);
|
||||
|
||||
ssize_t patty_ax25_sock_write(patty_ax25_sock *sock,
|
||||
uint8_t proto,
|
||||
void *buf,
|
||||
size_t len);
|
||||
|
||||
|
|
|
@ -7,12 +7,13 @@
|
|||
|
||||
int patty_ax25_call_socket(int server,
|
||||
int opts,
|
||||
int proto,
|
||||
char *path,
|
||||
size_t len) {
|
||||
enum patty_ax25_call call = PATTY_AX25_CALL_SOCKET;
|
||||
|
||||
patty_ax25_call_socket_request request = {
|
||||
opts
|
||||
opts, proto
|
||||
};
|
||||
|
||||
patty_ax25_call_socket_response response;
|
||||
|
|
|
@ -441,7 +441,7 @@ static int server_socket(patty_ax25_server *server,
|
|||
goto error_read;
|
||||
}
|
||||
|
||||
if ((sock = patty_ax25_sock_new(request.opts)) == NULL) {
|
||||
if ((sock = patty_ax25_sock_new(request.opts, request.proto)) == NULL) {
|
||||
goto error_sock_new;
|
||||
}
|
||||
|
||||
|
@ -1020,7 +1020,7 @@ static int handle_sabm(patty_ax25_server *server,
|
|||
goto error_lookup_client;
|
||||
}
|
||||
|
||||
if ((remote = patty_ax25_sock_new(local->opts)) == NULL) {
|
||||
if ((remote = patty_ax25_sock_new(local->opts, local->proto)) == NULL) {
|
||||
goto error_sock_new;
|
||||
}
|
||||
|
||||
|
@ -1354,7 +1354,7 @@ static int handle_sock(void *key,
|
|||
goto done;
|
||||
}
|
||||
|
||||
if (patty_ax25_sock_write(sock, PATTY_AX25_PROTO_NONE, sock->buf, len) < 0) {
|
||||
if (patty_ax25_sock_write(sock, sock->buf, len) < 0) {
|
||||
goto error_sock_write;
|
||||
}
|
||||
|
||||
|
|
28
src/sock.c
28
src/sock.c
|
@ -56,7 +56,8 @@ error_open:
|
|||
return -1;
|
||||
}
|
||||
|
||||
patty_ax25_sock *patty_ax25_sock_new(enum patty_ax25_sock_opts opts) {
|
||||
patty_ax25_sock *patty_ax25_sock_new(enum patty_ax25_sock_opts opts,
|
||||
enum patty_ax25_proto proto) {
|
||||
patty_ax25_sock *sock;
|
||||
|
||||
if ((sock = malloc(sizeof(*sock))) == NULL) {
|
||||
|
@ -77,6 +78,7 @@ patty_ax25_sock *patty_ax25_sock_new(enum patty_ax25_sock_opts opts) {
|
|||
sock->status = PATTY_AX25_SOCK_CLOSED;
|
||||
sock->mode = PATTY_AX25_SOCK_DM;
|
||||
sock->opts = opts;
|
||||
sock->proto = proto;
|
||||
sock->n_maxlen = PATTY_AX25_FRAME_DEFAULT_MAXLEN;
|
||||
sock->n_window = PATTY_AX25_FRAME_DEFAULT_WINDOW;
|
||||
|
||||
|
@ -159,10 +161,10 @@ static inline int toobig(patty_ax25_sock *sock,
|
|||
|
||||
ssize_t patty_ax25_sock_send(patty_ax25_sock *sock,
|
||||
uint16_t control,
|
||||
uint8_t proto,
|
||||
void *info,
|
||||
size_t infolen) {
|
||||
size_t offset;
|
||||
uint8_t *buf = (uint8_t *)sock->iface->tx_buf;
|
||||
|
||||
if (toobig(sock, control, infolen)) {
|
||||
goto error_toobig;
|
||||
|
@ -171,24 +173,24 @@ ssize_t patty_ax25_sock_send(patty_ax25_sock *sock,
|
|||
offset = copy_addr_to_tx_buf(sock);
|
||||
|
||||
if (sock->mode == PATTY_AX25_SOCK_SABME) {
|
||||
((uint8_t *)sock->iface->tx_buf)[offset++] = (control & 0xff00) >> 8;
|
||||
((uint8_t *)sock->iface->tx_buf)[offset++] = control & 0x00ff;
|
||||
buf[offset++] = (control & 0xff00) >> 8;
|
||||
buf[offset++] = control & 0x00ff;
|
||||
|
||||
sock->seq_send = (sock->seq_send + 1) & 0x07;
|
||||
} else {
|
||||
((uint8_t *)sock->iface->tx_buf)[offset++] = control;
|
||||
buf[offset++] = control;
|
||||
|
||||
sock->seq_send = (sock->seq_send + 1) & 0x7f;
|
||||
}
|
||||
|
||||
if (PATTY_AX25_CONTROL_INFO(control)) {
|
||||
((uint8_t *)sock->iface->tx_buf)[offset++] = proto;
|
||||
buf[offset++] = (uint8_t)sock->proto;
|
||||
|
||||
memcpy((uint8_t *)sock->iface->tx_buf + offset, info, infolen);
|
||||
memcpy(buf + offset, info, infolen);
|
||||
offset += infolen;
|
||||
}
|
||||
|
||||
return patty_ax25_if_send(sock->iface, sock->iface->tx_buf, offset);
|
||||
return patty_ax25_if_send(sock->iface, buf, offset);
|
||||
|
||||
error_toobig:
|
||||
return -1;
|
||||
|
@ -198,7 +200,6 @@ ssize_t patty_ax25_sock_send_sabm(patty_ax25_sock *sock, int poll) {
|
|||
return patty_ax25_sock_send(sock,
|
||||
PATTY_AX25_FRAME_U_SABM
|
||||
| PATTY_AX25_FRAME_U_POLL,
|
||||
PATTY_AX25_PROTO_NONE,
|
||||
NULL,
|
||||
0);
|
||||
}
|
||||
|
@ -207,7 +208,6 @@ ssize_t patty_ax25_sock_send_sabme(patty_ax25_sock *sock, int poll) {
|
|||
return patty_ax25_sock_send(sock,
|
||||
PATTY_AX25_FRAME_U_SABME
|
||||
| PATTY_AX25_FRAME_U_POLL,
|
||||
PATTY_AX25_PROTO_NONE,
|
||||
NULL,
|
||||
0);
|
||||
}
|
||||
|
@ -216,17 +216,19 @@ ssize_t patty_ax25_sock_send_disc(patty_ax25_sock *sock, int poll) {
|
|||
return patty_ax25_sock_send(sock,
|
||||
PATTY_AX25_FRAME_U_DISC
|
||||
| PATTY_AX25_FRAME_U_POLL,
|
||||
PATTY_AX25_PROTO_NONE,
|
||||
NULL,
|
||||
0);
|
||||
}
|
||||
|
||||
ssize_t patty_ax25_sock_write(patty_ax25_sock *sock,
|
||||
uint8_t proto,
|
||||
void *buf,
|
||||
size_t len) {
|
||||
uint16_t control = 0x0000;
|
||||
|
||||
if (sock->opts & PATTY_AX25_SOCK_RAW) {
|
||||
return patty_ax25_if_send(sock->iface, buf, len);
|
||||
}
|
||||
|
||||
switch (sock->mode) {
|
||||
case PATTY_AX25_SOCK_DM:
|
||||
errno = EBADF;
|
||||
|
@ -244,7 +246,7 @@ ssize_t patty_ax25_sock_write(patty_ax25_sock *sock,
|
|||
break;
|
||||
}
|
||||
|
||||
if (patty_ax25_sock_send(sock, control, proto, buf, len) < 0) {
|
||||
if (patty_ax25_sock_send(sock, control, buf, len) < 0) {
|
||||
goto error_send;
|
||||
}
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ int main(int argc, char **argv) {
|
|||
goto error_connect;
|
||||
}
|
||||
|
||||
if ((sock = patty_ax25_call_socket(fd, PATTY_AX25_SOCK_NONE, path, PATTY_AX25_SOCK_PATH_SIZE)) < 0) {
|
||||
if ((sock = patty_ax25_call_socket(fd, 0, PATTY_AX25_PROTO_NONE, path, PATTY_AX25_SOCK_PATH_SIZE)) < 0) {
|
||||
fprintf(stderr, "%s: %s: %s\n",
|
||||
argv[0], "patty_ax25_call_socket()", strerror(errno));
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ int main(int argc, char **argv) {
|
|||
goto error_connect;
|
||||
}
|
||||
|
||||
if ((local = patty_ax25_call_socket(fd, PATTY_AX25_SOCK_NONE, NULL, 0)) < 0) {
|
||||
if ((local = patty_ax25_call_socket(fd, 0, PATTY_AX25_PROTO_NONE, NULL, 0)) < 0) {
|
||||
fprintf(stderr, "%s: %s: %s\n",
|
||||
argv[0], "patty_ax25_call_socket()", strerror(errno));
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue