summaryrefslogtreecommitdiff
path: root/src/libgsmd
diff options
context:
space:
mode:
Diffstat (limited to 'src/libgsmd')
-rw-r--r--src/libgsmd/libgsmd.c39
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));
personal git repositories of Harald Welte. Your mileage may vary