aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2012-07-27 17:56:57 +0300
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2012-07-27 18:04:52 +0300
commit04cc5bfe556f067d50592666486f94045cb2454a (patch)
tree4fdd8b510eeebe08c68c03fb1f09650be8f3e000
parent56cec0f87a3887148dce8e4b4a7de40772b8c80c (diff)
downloadobexd-04cc5bfe556f067d50592666486f94045cb2454a.tar.gz
irmc: Make handle of location more clear
Add proper defines for supported paths and convert relative path absolute to align with PBAP paths.
-rw-r--r--plugins/irmc.c156
-rw-r--r--plugins/phonebook.h7
2 files changed, 85 insertions, 78 deletions
diff --git a/plugins/irmc.c b/plugins/irmc.c
index 2574b22..2a8c543 100644
--- a/plugins/irmc.c
+++ b/plugins/irmc.c
@@ -304,77 +304,22 @@ static void *irmc_open_devinfo(struct irmc_session *irmc, int *err)
return irmc;
}
-static void *irmc_open_pb(const char *name, struct irmc_session *irmc,
- int *err)
+static void *irmc_open_pb(struct irmc_session *irmc, int *err)
{
- GString *mybuf;
int ret;
- if (!g_strcmp0(name, ".vcf")) {
- /* how can we tell if the vcard count call already finished? */
- irmc->request = phonebook_pull(PB_CONTACTS, irmc->params,
+ /* how can we tell if the vcard count call already finished? */
+ irmc->request = phonebook_pull(PB_CONTACTS, irmc->params,
query_result, irmc, &ret);
- if (ret < 0) {
- DBG("phonebook_pull failed...");
- goto fail;
- }
-
- ret = phonebook_pull_read(irmc->request);
- if (ret < 0) {
- DBG("phonebook_pull_read failed...");
- goto fail;
- }
-
- return irmc;
- }
-
- if (!g_strcmp0(name, "/info.log")) {
- mybuf = g_string_new("");
- g_string_printf(mybuf, "Total-Records:%d\r\n"
- "Maximum-Records:%d\r\n"
- "IEL:2\r\n"
- "DID:%s\r\n",
- irmc->params->maxlistcount,
- irmc->params->maxlistcount, irmc->did);
- } else if (!strncmp(name, "/luid/", 6)) {
- name += 6;
- if (!g_strcmp0(name, "cc.log")) {
- mybuf = g_string_new("");
- g_string_printf(mybuf, "%d\r\n",
- irmc->params->maxlistcount);
- } else {
- int l = strlen(name);
- /* FIXME:
- * Reply the same to any *.log so we hopefully force a
- * full phonebook dump.
- * Is IEL:2 ok?
- */
- if (l > 4 && !g_strcmp0(name + l - 4, ".log")) {
- DBG("changelog request, force whole book");
- mybuf = g_string_new("");
- g_string_printf(mybuf, "SN:%s\r\n"
- "DID:%s\r\n"
- "Total-Records:%d\r\n"
- "Maximum-Records:%d\r\n"
- "*\r\n",
- irmc->sn, irmc->did,
- irmc->params->maxlistcount,
- irmc->params->maxlistcount);
- } else {
- ret = -EBADR;
- goto fail;
- }
- }
- } else {
- ret = -EBADR;
+ if (ret < 0) {
+ DBG("phonebook_pull failed...");
goto fail;
}
- if (!irmc->buffer)
- irmc->buffer = mybuf;
- else {
- irmc->buffer = g_string_append(irmc->buffer, mybuf->str);
- g_string_free(mybuf, TRUE);
+ ret = phonebook_pull_read(irmc->request);
+ if (ret < 0) {
+ DBG("phonebook_pull_read failed...");
+ goto fail;
}
return irmc;
@@ -386,8 +331,32 @@ fail:
return NULL;
}
-static void *irmc_open_cal(const char *name, struct irmc_session *irmc,
- int *err)
+static void *irmc_open_info(struct irmc_session *irmc, int *err)
+{
+ if (irmc->buffer == NULL)
+ irmc->buffer = g_string_new("");
+
+ g_string_printf(irmc->buffer, "Total-Records:%d\r\n"
+ "Maximum-Records:%d\r\n"
+ "IEL:2\r\n"
+ "DID:%s\r\n",
+ irmc->params->maxlistcount,
+ irmc->params->maxlistcount, irmc->did);
+
+ return irmc;
+}
+
+static void *irmc_open_cc(struct irmc_session *irmc, int *err)
+{
+ if (irmc->buffer == NULL)
+ irmc->buffer = g_string_new("");
+
+ g_string_printf(irmc->buffer, "%d\r\n", irmc->params->maxlistcount);
+
+ return irmc;
+}
+
+static void *irmc_open_cal(struct irmc_session *irmc, int *err)
{
/* no suport yet. Just return an empty buffer. cal.vcs */
DBG("unsupported, returning empty buffer");
@@ -398,8 +367,7 @@ static void *irmc_open_cal(const char *name, struct irmc_session *irmc,
return irmc;
}
-static void *irmc_open_nt(const char *name, struct irmc_session *irmc,
- int *err)
+static void *irmc_open_nt(struct irmc_session *irmc, int *err)
{
/* no suport yet. Just return an empty buffer. nt.vnt */
DBG("unsupported, returning empty buffer");
@@ -410,12 +378,30 @@ static void *irmc_open_nt(const char *name, struct irmc_session *irmc,
return irmc;
}
+static void *irmc_open_luid(struct irmc_session *irmc, int *err)
+{
+ if (irmc->buffer == NULL)
+ irmc->buffer = g_string_new("");
+
+ DBG("changelog request, force whole book");
+ g_string_printf(irmc->buffer, "SN:%s\r\n"
+ "DID:%s\r\n"
+ "Total-Records:%d\r\n"
+ "Maximum-Records:%d\r\n"
+ "*\r\n",
+ irmc->sn, irmc->did,
+ irmc->params->maxlistcount,
+ irmc->params->maxlistcount);
+
+ return irmc;
+}
+
static void *irmc_open(const char *name, int oflag, mode_t mode, void *context,
size_t *size, int *err)
{
struct irmc_session *irmc = context;
int ret = 0;
- const char *p;
+ char *path;
DBG("name %s context %p", name, context);
@@ -423,20 +409,34 @@ static void *irmc_open(const char *name, int oflag, mode_t mode, void *context,
ret = -EPERM;
goto fail;
}
- if (name == NULL || strncmp(name, "telecom/", 8) != 0) {
+
+ if (name == NULL) {
ret = -EBADR;
goto fail;
}
- p = name + 8;
- if (!g_strcmp0(p, "devinfo.txt"))
+ /* Always contains the absolute path */
+ if (g_path_is_absolute(name))
+ path = g_strdup(name);
+ else
+ path = g_build_filename("/", name, NULL);
+
+ if (g_str_equal(path, PB_DEVINFO))
return irmc_open_devinfo(irmc, err);
- else if (!strncmp(p, "pb", 2))
- return irmc_open_pb(p+2, irmc, err);
- else if (!strncmp(p, "cal", 3))
- return irmc_open_cal(p+3, irmc, err);
- else if (!strncmp(p, "nt", 2))
- return irmc_open_nt(p+2, irmc, err);
+ else if (g_str_equal(path, PB_CONTACTS))
+ return irmc_open_pb(irmc, err);
+ else if (g_str_equal(path, PB_INFO_LOG))
+ return irmc_open_info(irmc, err);
+ else if (g_str_equal(path, PB_CC_LOG))
+ return irmc_open_cc(irmc, err);
+ else if (g_str_has_prefix(path, PB_CALENDAR_FOLDER))
+ return irmc_open_cal(irmc, err);
+ else if (g_str_has_prefix(path, PB_NOTES_FOLDER))
+ return irmc_open_nt(irmc, err);
+ else if (g_str_has_prefix(path, PB_LUID_FOLDER))
+ return irmc_open_luid(irmc, err);
+ else
+ ret = -EBADR;
fail:
if (err)
diff --git a/plugins/phonebook.h b/plugins/phonebook.h
index 740557c..6e51c73 100644
--- a/plugins/phonebook.h
+++ b/plugins/phonebook.h
@@ -31,16 +31,23 @@
#define PB_TELECOM_FOLDER "/telecom"
#define PB_CONTACTS_FOLDER "/telecom/pb"
+#define PB_CALENDAR_FOLDER "/telecom/cal"
+#define PB_NOTES_FOLDER "/telecom/nt"
#define PB_CALLS_COMBINED_FOLDER "/telecom/cch"
#define PB_CALLS_INCOMING_FOLDER "/telecom/ich"
#define PB_CALLS_MISSED_FOLDER "/telecom/mch"
#define PB_CALLS_OUTGOING_FOLDER "/telecom/och"
+#define PB_LUID_FOLDER "/telecom/luid"
#define PB_CONTACTS "/telecom/pb.vcf"
#define PB_CALLS_COMBINED "/telecom/cch.vcf"
#define PB_CALLS_INCOMING "/telecom/ich.vcf"
#define PB_CALLS_MISSED "/telecom/mch.vcf"
#define PB_CALLS_OUTGOING "/telecom/och.vcf"
+#define PB_DEVINFO "/telecom/devinfo.txt"
+#define PB_INFO_LOG "/telecom/pb/info.log"
+#define PB_CC_LOG "/telecom/pb/luid/cc.log"
+
struct apparam_field {
/* list and pull attributes */