diff options
Diffstat (limited to 'src/libgsmd')
-rw-r--r-- | src/libgsmd/libgsmd.c | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/src/libgsmd/libgsmd.c b/src/libgsmd/libgsmd.c index e514617..7eb2701 100644 --- a/src/libgsmd/libgsmd.c +++ b/src/libgsmd/libgsmd.c @@ -3,6 +3,7 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> +#include <errno.h> #include <sys/types.h> #include <sys/socket.h> @@ -12,6 +13,29 @@ #include "lgsm_internals.h" +static int lgsm_get_packet(struct lgsm_handle *lh) +{ + static char buf[GSMD_MSGSIZE_MAX]; + struct gsmd_msg_hdr *hdr = (struct gsmd_msg_hdr *) buf; + int rc = read(lh->fd, buf, sizeof(buf)); + if (rc <= 0) + return rc; + + if (hdr->version != GSMD_PROTO_VERSION) + return -EINVAL; + + switch (hdr->msg_type) { + case GSMD_MSG_PASSTHROUGH: + + break; + default: + return -EINVAL; + } + + return 0; +} + + static int lgsm_open_backend(struct lgsm_handle *lh, const char *device) { int rc; @@ -33,16 +57,17 @@ static int lgsm_open_backend(struct lgsm_handle *lh, const char *device) lh->fd = -1; return rc; } - } else { - /* use direct access to device node ([virtual] tty device) */ - lh->fd = open(device, O_RDWR); - if (lh->fd < 0) - return lh->fd; - } - + } else + return -EINVAL; + return 0; } +int lgsm_fd(struct lgsm_handle *lh) +{ + return lh->fd; +} + struct lgsm_handle *lgsm_init(const char *device) { struct lgsm_handle *lh = malloc(sizeof(*lh)); |