diff --git a/tools/parser/obex.c b/tools/parser/obex.c
index 3381442..0a73a79 100644
--- a/tools/parser/obex.c
+++ b/tools/parser/obex.c
#include "parser.h"
-#define TABLE_SIZE 20
-
-static struct {
- uint16_t handle;
- uint8_t dlci;
- uint8_t opcode;
- uint8_t status;
- struct frame frm;
-} table[TABLE_SIZE];
-
-static void del_frame(uint16_t handle, uint8_t dlci)
-{
- int i;
-
- for (i = 0; i < TABLE_SIZE; i++)
- if (table[i].handle == handle && table[i].dlci == dlci) {
- table[i].handle = 0;
- table[i].dlci = 0;
- table[i].opcode = 0;
- table[i].status = 0;
- if (table[i].frm.data)
- free(table[i].frm.data);
- memset(&table[i].frm, 0, sizeof(struct frame));
- break;
- }
-}
-
-static struct frame *add_frame(struct frame *frm)
-{
- struct frame *fr;
- void *data;
- int i, pos = -1;
-
- for (i = 0; i < TABLE_SIZE; i++) {
- if (table[i].handle == frm->handle && table[i].dlci == frm->dlci) {
- pos = i;
- break;
- }
-
- if (pos < 0 && !table[i].handle && !table[i].dlci)
- pos = i;
- }
-
- if (pos < 0)
- return frm;
-
- table[pos].handle = frm->handle;
- table[pos].dlci = frm->dlci;
- fr = &table[pos].frm;
-
- data = malloc(fr->len + frm->len);
- if (!data) {
- perror("Can't allocate OBEX stream buffer");
- del_frame(frm->handle, frm->dlci);
- return frm;
- }
-
- if (fr->len > 0)
- memcpy(data, fr->ptr, fr->len);
-
- if (frm->len > 0)
- memcpy(data + fr->len, frm->ptr, frm->len);
-
- if (fr->data)
- free(fr->data);
-
- fr->data = data;
- fr->data_len = fr->len + frm->len;
- fr->len = fr->data_len;
- fr->ptr = fr->data;
- fr->dev_id = frm->dev_id;
- fr->in = frm->in;
- fr->ts = frm->ts;
- fr->handle = frm->handle;
- fr->cid = frm->cid;
- fr->num = frm->num;
- fr->dlci = frm->dlci;
- fr->channel = frm->channel;
- fr->audio_fd = frm->audio_fd;
-
- return fr;
-}
-
-static uint8_t get_opcode(uint16_t handle, uint8_t dlci)
-{
- int i;
-
- for (i = 0; i < TABLE_SIZE; i++)
- if (table[i].handle == handle && table[i].dlci == dlci)
- return table[i].opcode;
-
- return 0x00;
-}
-
-static void set_opcode(uint16_t handle, uint8_t dlci, uint8_t opcode)
-{
- int i;
-
- for (i = 0; i < TABLE_SIZE; i++)
- if (table[i].handle == handle && table[i].dlci == dlci) {
- table[i].opcode = opcode;
- break;
- }
-}
-
-static uint8_t get_status(uint16_t handle, uint8_t dlci)
-{
- int i;
-
- for (i = 0; i < TABLE_SIZE; i++)
- if (table[i].handle == handle && table[i].dlci == dlci)
- return table[i].status;
-
- return 0x00;
-}
-
-static void set_status(uint16_t handle, uint8_t dlci, uint8_t status)
-{
- int i;
-
- for (i = 0; i < TABLE_SIZE; i++)
- if (table[i].handle == handle && table[i].dlci == dlci) {
- table[i].status = status;
- break;
- }
-}
-
static char *opcode2str(uint8_t opcode)
{
switch (opcode & 0x7f) {
parse_headers(level, frm);
}
}
-
-void obex_clear(uint16_t handle, uint8_t dlci)
-{
- del_frame(handle, dlci);
-}
diff --git a/tools/parser/parser.c b/tools/parser/parser.c
index c76dc56..cab8136 100644
--- a/tools/parser/parser.c
+++ b/tools/parser/parser.c
return (pos < 0) ? 0 : proto_table[pos].proto;
}
+#define FRAME_TABLE_SIZE 20
+
+static struct {
+ uint16_t handle;
+ uint8_t dlci;
+ uint8_t opcode;
+ uint8_t status;
+ struct frame frm;
+} frame_table[FRAME_TABLE_SIZE];
+
+void del_frame(uint16_t handle, uint8_t dlci)
+{
+ int i;
+
+ for (i = 0; i < FRAME_TABLE_SIZE; i++)
+ if (frame_table[i].handle == handle &&
+ frame_table[i].dlci == dlci) {
+ frame_table[i].handle = 0;
+ frame_table[i].dlci = 0;
+ frame_table[i].opcode = 0;
+ frame_table[i].status = 0;
+ if (frame_table[i].frm.data)
+ free(frame_table[i].frm.data);
+ memset(&frame_table[i].frm, 0, sizeof(struct frame));
+ break;
+ }
+}
+
+struct frame *add_frame(struct frame *frm)
+{
+ struct frame *fr;
+ void *data;
+ int i, pos = -1;
+
+ for (i = 0; i < FRAME_TABLE_SIZE; i++) {
+ if (frame_table[i].handle == frm->handle &&
+ frame_table[i].dlci == frm->dlci) {
+ pos = i;
+ break;
+ }
+
+ if (pos < 0 && !frame_table[i].handle && !frame_table[i].dlci)
+ pos = i;
+ }
+
+ if (pos < 0)
+ return frm;
+
+ frame_table[pos].handle = frm->handle;
+ frame_table[pos].dlci = frm->dlci;
+ fr = &frame_table[pos].frm;
+
+ data = malloc(fr->len + frm->len);
+ if (!data) {
+ perror("Can't allocate frame stream buffer");
+ del_frame(frm->handle, frm->dlci);
+ return frm;
+ }
+
+ if (fr->len > 0)
+ memcpy(data, fr->ptr, fr->len);
+
+ if (frm->len > 0)
+ memcpy(data + fr->len, frm->ptr, frm->len);
+
+ if (fr->data)
+ free(fr->data);
+
+ fr->data = data;
+ fr->data_len = fr->len + frm->len;
+ fr->len = fr->data_len;
+ fr->ptr = fr->data;
+ fr->dev_id = frm->dev_id;
+ fr->in = frm->in;
+ fr->ts = frm->ts;
+ fr->handle = frm->handle;
+ fr->cid = frm->cid;
+ fr->num = frm->num;
+ fr->dlci = frm->dlci;
+ fr->channel = frm->channel;
+ fr->audio_fd = frm->audio_fd;
+
+ return fr;
+}
+
+uint8_t get_opcode(uint16_t handle, uint8_t dlci)
+{
+ int i;
+
+ for (i = 0; i < FRAME_TABLE_SIZE; i++)
+ if (frame_table[i].handle == handle &&
+ frame_table[i].dlci == dlci)
+ return frame_table[i].opcode;
+
+ return 0x00;
+}
+
+void set_opcode(uint16_t handle, uint8_t dlci, uint8_t opcode)
+{
+ int i;
+
+ for (i = 0; i < FRAME_TABLE_SIZE; i++)
+ if (frame_table[i].handle == handle &&
+ frame_table[i].dlci == dlci) {
+ frame_table[i].opcode = opcode;
+ break;
+ }
+}
+
+uint8_t get_status(uint16_t handle, uint8_t dlci)
+{
+ int i;
+
+ for (i = 0; i < FRAME_TABLE_SIZE; i++)
+ if (frame_table[i].handle == handle &&
+ frame_table[i].dlci == dlci)
+ return frame_table[i].status;
+
+ return 0x00;
+}
+
+void set_status(uint16_t handle, uint8_t dlci, uint8_t status)
+{
+ int i;
+
+ for (i = 0; i < FRAME_TABLE_SIZE; i++)
+ if (frame_table[i].handle == handle &&
+ frame_table[i].dlci == dlci) {
+ frame_table[i].status = status;
+ break;
+ }
+}
+
void ascii_dump(int level, struct frame *frm, int num)
{
unsigned char *buf = frm->ptr;
diff --git a/tools/parser/parser.h b/tools/parser/parser.h
index 1b82b57..ba16607 100644
--- a/tools/parser/parser.h
+++ b/tools/parser/parser.h
void set_proto(uint16_t handle, uint16_t psm, uint8_t channel, uint32_t proto);
uint32_t get_proto(uint16_t handle, uint16_t psm, uint8_t channel);
+struct frame *add_frame(struct frame *frm);
+void del_frame(uint16_t handle, uint8_t dlci);
+
+uint8_t get_opcode(uint16_t handle, uint8_t dlci);
+void set_opcode(uint16_t handle, uint8_t dlci, uint8_t opcode);
+
+uint8_t get_status(uint16_t handle, uint8_t dlci);
+void set_status(uint16_t handle, uint8_t dlci, uint8_t status);
+
void l2cap_clear(uint16_t handle);
-void obex_clear(uint16_t handle, uint8_t dlci);
void ascii_dump(int level, struct frame *frm, int num);
void hex_dump(int level, struct frame *frm, int num);
diff --git a/tools/parser/rfcomm.c b/tools/parser/rfcomm.c
index d576342..e7ffc99 100644
--- a/tools/parser/rfcomm.c
+++ b/tools/parser/rfcomm.c
break;
case DISC:
printf("DISC: ");
- obex_clear(frm->handle, GET_DLCI(head.addr));
+ del_frame(frm->handle, GET_DLCI(head.addr));
break;
default:
printf("ERR: ");
diff --git a/tools/parser/sdp.c b/tools/parser/sdp.c
index f3ddbef..9a3121e 100644
--- a/tools/parser/sdp.c
+++ b/tools/parser/sdp.c
static struct frame frame_table[FRAME_TABLE_SIZE];
-static int add_frame(struct frame *frm, int count)
+static int frame_add(struct frame *frm, int count)
{
register struct frame *fr;
register unsigned char *data;
return pos;
}
-static struct frame *get_frame(struct frame *frm, int count)
+static struct frame *frame_get(struct frame *frm, int count)
{
register int pos;
- pos = add_frame(frm, count);
+ pos = frame_add(frm, count);
if (pos < 0)
return frm;
if (cont == 0) {
/* Parse AttributeList */
- print_attr_list(level + 1, get_frame(frm, count));
+ print_attr_list(level + 1, frame_get(frm, count));
} else
- add_frame(frm, count);
+ frame_add(frm, count);
print_cont_state(level + 1, frm->ptr + count);
break;
if (cont == 0) {
/* Parse AttributeLists */
- print_attr_lists(level + 1, get_frame(frm, count));
+ print_attr_lists(level + 1, frame_get(frm, count));
} else
- add_frame(frm, count);
+ frame_add(frm, count);
print_cont_state(level + 1, frm->ptr + count);
break;