diff options
author | Janos Kovacs <janos.f.kovacs@nokia.com> | 2009-12-22 23:49:42 +0200 |
---|---|---|
committer | Janos Kovacs <janos.f.kovacs@nokia.com> | 2009-12-22 23:49:42 +0200 |
commit | fd47f10ffce72bb482210c852cbbe77e07b0c6a1 (patch) | |
tree | 76bbbfacedc091aceea51c9e14494fe7ba556517 /src | |
parent | f582db3a4259026198144f3e45e6cece15c7c263 (diff) |
modularization and naming convetion change in message related .[hc] modules
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 7 | ||||
-rw-r--r-- | src/dbus-msg.c (renamed from src/resmsg.c) | 224 | ||||
-rw-r--r-- | src/dbus-msg.h | 24 | ||||
-rw-r--r-- | src/dbus-proto.c (renamed from src/dbus.c) | 11 | ||||
-rw-r--r-- | src/dbus-proto.h (renamed from src/dbus.h) | 6 | ||||
-rw-r--r-- | src/internal-msg.c | 77 | ||||
-rw-r--r-- | src/internal-msg.h | 20 | ||||
-rw-r--r-- | src/internal-proto.c (renamed from src/internal.c) | 11 | ||||
-rw-r--r-- | src/internal-proto.h (renamed from src/internal.h) | 0 | ||||
-rw-r--r-- | src/res-msg.c | 166 | ||||
-rw-r--r-- | src/res-msg.h (renamed from src/resmsg.h) | 12 | ||||
-rw-r--r-- | src/resproto.c | 6 | ||||
-rw-r--r-- | src/resproto.h | 4 |
13 files changed, 319 insertions, 249 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 646089f..dd708a1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,8 +1,9 @@ libdir = ${src_dir} lib_LTLIBRARIES = libresource.la -libresource_la_SOURCES = resource.c resmsg.c resproto.c resset.c \ - dbus.c internal.c +libresource_la_SOURCES = resource.c res-msg.c resproto.c resset.c \ + dbus-proto.c dbus-msg.c \ + internal-proto.c internal-msg.c libresource_la_CFLAGS = @DBUS_CFLAGS@ -I$(top_srcdir) if DEBUG libresource_la_CFLAGS += -D__DEBUG__ @@ -11,7 +12,7 @@ libresource_la_LDFLAGS = /usr/lib -version-info $(subst .,:,$(VERSION)) libresource_la_LIBADD = @DBUS_LIBS@ pkgincludedir = $(includedir)/resource -pkginclude_HEADERS = resource.h resproto.h resset.h resmsg.h +pkginclude_HEADERS = resource.h resproto.h resset.h res-msg.h libdir = /usr/lib MAINTAINERCLEANFILES = Makefile.in diff --git a/src/resmsg.c b/src/dbus-msg.c index 10749ae..3a505a3 100644 --- a/src/resmsg.c +++ b/src/dbus-msg.c @@ -1,14 +1,10 @@ -#include <stdio.h> #include <stdlib.h> #include <string.h> -#include "resproto.h" -#include "resmsg.h" +#include "res-msg.h" +#include "dbus-msg.h" -static char *flag_str(uint32_t); - - -DBusMessage *resmsg_compose_dbus_message(const char *dest, +DBusMessage *resmsg_dbus_compose_message(const char *dest, const char *path, const char *interface, const char *method, @@ -87,7 +83,7 @@ DBusMessage *resmsg_compose_dbus_message(const char *dest, return NULL; } -DBusMessage *resmsg_reply_dbus_message(DBusMessage *dbusmsg,resmsg_t *resreply) +DBusMessage *resmsg_dbus_reply_message(DBusMessage *dbusmsg,resmsg_t *resreply) { static const char *empty_str = ""; @@ -118,7 +114,7 @@ DBusMessage *resmsg_reply_dbus_message(DBusMessage *dbusmsg,resmsg_t *resreply) return dbusreply; } -resmsg_t *resmsg_parse_dbus_message(DBusMessage *dbusmsg, resmsg_t *resmsg) +resmsg_t *resmsg_dbus_parse_message(DBusMessage *dbusmsg, resmsg_t *resmsg) { int32_t type; resmsg_record_t *record; @@ -233,216 +229,6 @@ resmsg_t *resmsg_parse_dbus_message(DBusMessage *dbusmsg, resmsg_t *resmsg) } -resmsg_t *resmsg_copy_internal_message(resmsg_t *src) -{ - resmsg_t *dst = NULL; - - if (src != NULL && (dst = malloc(sizeof(resmsg_t))) != NULL) { - memset(dst, 0, sizeof(resmsg_t)); - - switch (src->type) { - - case RESMSG_REGISTER: - case RESMSG_UPDATE: - dst->record = src->record; - dst->record.class = strdup(src->record.class); - break; - - case RESMSG_UNREGISTER: - case RESMSG_ACQUIRE: - case RESMSG_RELEASE: - dst->possess = src->possess; - break; - - case RESMSG_GRANT: - case RESMSG_ADVICE: - dst->notify = src->notify; - break; - - case RESMSG_STATUS: - dst->status = src->status; - dst->status.errmsg = strdup(src->status.errmsg); - break; - - default: - free(dst); - dst = NULL; - break; - } - } - - return dst; -} - -void resmsg_destroy_internal_message(resmsg_t *msg) -{ - if (msg != NULL) { - switch (msg->type) { - - case RESMSG_REGISTER: - case RESMSG_UPDATE: - free(msg->record.class); - break; - - case RESMSG_STATUS: - free((void *)msg->status.errmsg); - break; - - default: - break; - } - - free(msg); - } -} - -char *resmsg_dump_message(resmsg_t *resmsg, int indent, char *buf, int len) -{ -#define PRINT(fmt, args...) \ - do { \ - if (len > 0) { \ - p += (l = snprintf(p, len, "%s" fmt "\n", spaces, ##args)); \ - l -= len; \ - } \ - } while(0) - - char spaces[256]; - int l; - char *p; - char r[512]; - resmsg_rset_t *rset; - resmsg_record_t *record; - resmsg_possess_t *possess; - resmsg_notify_t *notify; - resmsg_status_t *status; - - if (!buf || len < 1 || indent < 0) - return ""; - - p = buf; - *buf = '\0'; - memset(spaces, ' ', sizeof(spaces)); - spaces[indent < sizeof(spaces) ? indent : sizeof(spaces)-1] = '\0'; - - PRINT("type : %s (%d)", resmsg_type_str(resmsg->type), resmsg->type); - PRINT("id : %u" , resmsg->any.id); - PRINT("reqno : %u" , resmsg->any.reqno); - - switch (resmsg->type) { - - case RESMSG_REGISTER: - case RESMSG_UPDATE: - record = &resmsg->record; - rset = &record->rset; - PRINT("rset.all : %s" , resmsg_res_str(rset->all , r, sizeof(r))); - PRINT("rset.share: %s" , resmsg_res_str(rset->share, r, sizeof(r))); - PRINT("rset.opt : %s" , resmsg_res_str(rset->opt , r, sizeof(r))); - PRINT("class : '%s'", record->class && record->class[0] ? - record->class : "<unknown>"); - break; - - case RESMSG_UNREGISTER: - case RESMSG_ACQUIRE: - case RESMSG_RELEASE: - possess = &resmsg->possess; - break; - - case RESMSG_GRANT: - case RESMSG_ADVICE: - notify = &resmsg->notify; - PRINT("resrc : %s", resmsg_res_str(notify->resrc, r, sizeof(r))); - break; - - case RESMSG_STATUS: - status = &resmsg->status; - PRINT("errcod : %d" , status->errcod); - PRINT("errstr : '%s'", status->errmsg); - break; - - default: - break; - } - - return buf; - -#undef PRINT -} - -char *resmsg_type_str(resmsg_type_t type) -{ - char *str; - - switch (type) { - case RESMSG_REGISTER: str = "register"; break; - case RESMSG_UNREGISTER: str = "unregister"; break; - case RESMSG_UPDATE: str = "update"; break; - case RESMSG_ACQUIRE: str = "acquire"; break; - case RESMSG_RELEASE: str = "releaase"; break; - case RESMSG_GRANT: str = "grant"; break; - case RESMSG_ADVICE: str = "advice"; break; - case RESMSG_STATUS: str = "status"; break; - default: str = "<unknown type>"; break; - } - - return str; -} - - - -char *resmsg_res_str(uint32_t res, char *buf, int len) -{ - char *p; - char *s; - char *f; - int l; - uint32_t m; - uint32_t i; - char hex[64]; - - if (!buf || len < 1) - return ""; - - *buf = '\0'; - - snprintf(hex, sizeof(hex), "0x%x", res); - - for (p = buf, s = "", i = 0; i < 32 && res != 0 && len > 0; i++) { - m = 1 << i; - - if ((res & m) != 0) { - res &= ~m; - - if ((f = flag_str(m)) != NULL) { - l = snprintf(p, len, "%s%s", s, f); - s = " | "; - - p += l; - len -= l; - } - } - } /* for */ - - if (l > 0) - snprintf(p, len, "%s(%s)", *s ? " ":"", hex); - - return buf; -} - -static char *flag_str(uint32_t flag) -{ - char *str; - - switch (flag) { - case RESMSG_AUDIO_PLAYBACK: str = "audio_playback"; break; - case RESMSG_VIDEO_PLAYBACK: str = "video_playback"; break; - case RESMSG_AUDIO_RECORDING: str = "audio_recording"; break; - case RESMSG_VIDEO_RECORDING: str = "video_recording"; break; - default: str = NULL; break; - } - - return str; -} - diff --git a/src/dbus-msg.h b/src/dbus-msg.h new file mode 100644 index 0000000..e4991c0 --- /dev/null +++ b/src/dbus-msg.h @@ -0,0 +1,24 @@ +#ifndef __RES_DBUS_MESSAGE_H__ +#define __RES_DBUS_MESSAGE_H__ + +#include <stdint.h> +#include <dbus/dbus.h> + +union resmsg_u; + +DBusMessage *resmsg_dbus_compose_message(const char *, const char *, + const char *, const char *, + union resmsg_u *); +DBusMessage *resmsg_dbus_reply_message(DBusMessage *, union resmsg_u *); +union resmsg_u *resmsg_dbus_parse_message(DBusMessage *, union resmsg_u *); + + +#endif /* __RES_DBUS_MESSAGE_H__ */ + +/* + * Local Variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim:set expandtab shiftwidth=4: + */ diff --git a/src/dbus.c b/src/dbus-proto.c index 0213264..b9e0bbb 100644 --- a/src/dbus.c +++ b/src/dbus-proto.c @@ -2,7 +2,8 @@ #include <stdio.h> #include <string.h> -#include "dbus.h" +#include "dbus-proto.h" +#include "dbus-msg.h" /* @@ -160,7 +161,7 @@ static int send_message(resset_t *rset, if (!(dest = rset->peer) || !(method = method_name(resmsg->type)) || - !(dbusmsg= resmsg_compose_dbus_message(dest,path,iface,method,resmsg))) + !(dbusmsg= resmsg_dbus_compose_message(dest,path,iface,method,resmsg))) { success = FALSE; } @@ -210,7 +211,7 @@ static int send_error(resset_t *rset, resmsg_t *resreply, void *data) DBusConnection *conn = rp->dbus.conn; DBusMessage *dbusmsg = (DBusMessage *)data; dbus_uint32_t serial = dbus_message_get_serial(dbusmsg); - DBusMessage *dbusreply = resmsg_reply_dbus_message(dbusmsg, resreply); + DBusMessage *dbusreply = resmsg_dbus_reply_message(dbusmsg, resreply); int success; dbus_connection_send(conn, dbusreply, &serial); @@ -250,7 +251,7 @@ static void status_method(DBusPendingCall *pend, void *data) resmsg.status.errmsg = errmsg ? errmsg : "<unidentified error>"; } else { - if (!resmsg_parse_dbus_message(dbusmsg, &resmsg) || + if (!resmsg_dbus_parse_message(dbusmsg, &resmsg) || reply->serial != dbus_message_get_reply_serial(dbusmsg) || resmsg.status.type != RESMSG_STATUS || resmsg.status.id != rset->id || @@ -526,7 +527,7 @@ static DBusHandlerResult manager_method(DBusConnection *conn, return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } - if (resmsg_parse_dbus_message(dbusmsg, &resmsg) != NULL) { + if (resmsg_dbus_parse_message(dbusmsg, &resmsg) != NULL) { method = method_name(resmsg.type); if (method && !strcmp(method, member) && (rp = find_resproto(conn))) { diff --git a/src/dbus.h b/src/dbus-proto.h index c28da27..ec8be95 100644 --- a/src/dbus.h +++ b/src/dbus-proto.h @@ -1,5 +1,5 @@ -#ifndef __RES_DBUS_H__ -#define __RES_DBUS_H__ +#ifndef __RES_DBUS_PROTO_H__ +#define __RES_DBUS_PROTO_H__ #include <stdarg.h> #include <resproto.h> @@ -33,7 +33,7 @@ int resproto_dbus_client_init(resproto_dbus_t *, va_list); -#endif /* __RES_DBUS_H__ */ +#endif /* __RES_DBUS_PROTO_H__ */ /* * Local Variables: diff --git a/src/internal-msg.c b/src/internal-msg.c new file mode 100644 index 0000000..1b68fa3 --- /dev/null +++ b/src/internal-msg.c @@ -0,0 +1,77 @@ +#include <stdlib.h> +#include <string.h> + +#include "res-msg.h" +#include "internal-msg.h" + +resmsg_t *resmsg_internal_copy_message(resmsg_t *src) +{ + resmsg_t *dst = NULL; + + if (src != NULL && (dst = malloc(sizeof(resmsg_t))) != NULL) { + memset(dst, 0, sizeof(resmsg_t)); + + switch (src->type) { + + case RESMSG_REGISTER: + case RESMSG_UPDATE: + dst->record = src->record; + dst->record.class = strdup(src->record.class); + break; + + case RESMSG_UNREGISTER: + case RESMSG_ACQUIRE: + case RESMSG_RELEASE: + dst->possess = src->possess; + break; + + case RESMSG_GRANT: + case RESMSG_ADVICE: + dst->notify = src->notify; + break; + + case RESMSG_STATUS: + dst->status = src->status; + dst->status.errmsg = strdup(src->status.errmsg); + break; + + default: + free(dst); + dst = NULL; + break; + } + } + + return dst; +} + +void resmsg_internal_destroy_message(resmsg_t *msg) +{ + if (msg != NULL) { + switch (msg->type) { + + case RESMSG_REGISTER: + case RESMSG_UPDATE: + free(msg->record.class); + break; + + case RESMSG_STATUS: + free((void *)msg->status.errmsg); + break; + + default: + break; + } + + free(msg); + } +} + + +/* + * Local Variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim:set expandtab shiftwidth=4: + */ diff --git a/src/internal-msg.h b/src/internal-msg.h new file mode 100644 index 0000000..120ea72 --- /dev/null +++ b/src/internal-msg.h @@ -0,0 +1,20 @@ +#ifndef __RES_INTERNAL_MESSAGE_H__ +#define __RES_INTERNAL_MESSAGE_H__ + +#include <stdint.h> + +union resmsg_u; + +union resmsg_u *resmsg_internal_copy_message(union resmsg_u *); +void resmsg_internal_destroy_message(union resmsg_u *); + + +#endif /* __RES_INTERNAL_MESSAGE_H__ */ + +/* + * Local Variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim:set expandtab shiftwidth=4: + */ diff --git a/src/internal.c b/src/internal-proto.c index 4dc9c2b..50ea8a4 100644 --- a/src/internal.c +++ b/src/internal-proto.c @@ -3,7 +3,8 @@ #include <string.h> #include <errno.h> -#include "internal.h" +#include "internal-msg.h" +#include "internal-proto.h" typedef struct { char name[64]; @@ -40,9 +41,9 @@ int resproto_internal_manager_init(resproto_internal_t *rp, va_list args) int success; if (resproto_manager != NULL) - success = (rp == resproto_manager); + success = (rp == resproto_manager); else { - success = TRUE; + success = TRUE; rp->connect = connect_fail; rp->disconn = resset_destroy; @@ -299,7 +300,7 @@ static void receive_message_init(resproto_internal_t *rp, memset(item, 0, sizeof(resproto_qitem_t)); item->peer = strdup(peer); item->data = data; - item->msg = resmsg_copy_internal_message(msg); + item->msg = resmsg_internal_copy_message(msg); queue_append_item(&rp->queue.head, item); @@ -328,7 +329,7 @@ static int receive_message_dequeue(void *data) receive_message_complete(rp, item); free(item->peer); - resmsg_destroy_internal_message(item->msg); + resmsg_internal_destroy_message(item->msg); free(item); } diff --git a/src/internal.h b/src/internal-proto.h index 4ef7fa7..4ef7fa7 100644 --- a/src/internal.h +++ b/src/internal-proto.h diff --git a/src/res-msg.c b/src/res-msg.c new file mode 100644 index 0000000..6df0108 --- /dev/null +++ b/src/res-msg.c @@ -0,0 +1,166 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "resproto.h" + +static char *flag_str(uint32_t); + + +char *resmsg_dump_message(resmsg_t *resmsg, int indent, char *buf, int len) +{ +#define PRINT(fmt, args...) \ + do { \ + if (len > 0) { \ + p += (l = snprintf(p, len, "%s" fmt "\n", spaces, ##args)); \ + l -= len; \ + } \ + } while(0) + + char spaces[256]; + int l; + char *p; + char r[512]; + resmsg_rset_t *rset; + resmsg_record_t *record; + resmsg_possess_t *possess; + resmsg_notify_t *notify; + resmsg_status_t *status; + + if (!buf || len < 1 || indent < 0) + return ""; + + p = buf; + *buf = '\0'; + memset(spaces, ' ', sizeof(spaces)); + spaces[indent < sizeof(spaces) ? indent : sizeof(spaces)-1] = '\0'; + + PRINT("type : %s (%d)", resmsg_type_str(resmsg->type), resmsg->type); + PRINT("id : %u" , resmsg->any.id); + PRINT("reqno : %u" , resmsg->any.reqno); + + switch (resmsg->type) { + + case RESMSG_REGISTER: + case RESMSG_UPDATE: + record = &resmsg->record; + rset = &record->rset; + PRINT("rset.all : %s" , resmsg_res_str(rset->all , r, sizeof(r))); + PRINT("rset.share: %s" , resmsg_res_str(rset->share, r, sizeof(r))); + PRINT("rset.opt : %s" , resmsg_res_str(rset->opt , r, sizeof(r))); + PRINT("class : '%s'", record->class && record->class[0] ? + record->class : "<unknown>"); + break; + + case RESMSG_UNREGISTER: + case RESMSG_ACQUIRE: + case RESMSG_RELEASE: + possess = &resmsg->possess; + break; + + case RESMSG_GRANT: + case RESMSG_ADVICE: + notify = &resmsg->notify; + PRINT("resrc : %s", resmsg_res_str(notify->resrc, r, sizeof(r))); + break; + + case RESMSG_STATUS: + status = &resmsg->status; + PRINT("errcod : %d" , status->errcod); + PRINT("errstr : '%s'", status->errmsg); + break; + + default: + break; + } + + return buf; + +#undef PRINT +} + +char *resmsg_type_str(resmsg_type_t type) +{ + char *str; + + switch (type) { + case RESMSG_REGISTER: str = "register"; break; + case RESMSG_UNREGISTER: str = "unregister"; break; + case RESMSG_UPDATE: str = "update"; break; + case RESMSG_ACQUIRE: str = "acquire"; break; + case RESMSG_RELEASE: str = "releaase"; break; + case RESMSG_GRANT: str = "grant"; break; + case RESMSG_ADVICE: str = "advice"; break; + case RESMSG_STATUS: str = "status"; break; + default: str = "<unknown type>"; break; + } + + return str; +} + + + +char *resmsg_res_str(uint32_t res, char *buf, int len) +{ + char *p; + char *s; + char *f; + int l; + uint32_t m; + uint32_t i; + char hex[64]; + + if (!buf || len < 1) + return ""; + + *buf = '\0'; + + snprintf(hex, sizeof(hex), "0x%x", res); + + for (p = buf, s = "", i = 0; i < 32 && res != 0 && len > 0; i++) { + m = 1 << i; + + if ((res & m) != 0) { + res &= ~m; + + if ((f = flag_str(m)) != NULL) { + l = snprintf(p, len, "%s%s", s, f); + s = " | "; + + p += l; + len -= l; + } + } + } /* for */ + + if (l > 0) + snprintf(p, len, "%s(%s)", *s ? " ":"", hex); + + return buf; +} + +static char *flag_str(uint32_t flag) +{ + char *str; + + switch (flag) { + case RESMSG_AUDIO_PLAYBACK: str = "audio_playback"; break; + case RESMSG_VIDEO_PLAYBACK: str = "video_playback"; break; + case RESMSG_AUDIO_RECORDING: str = "audio_recording"; break; + case RESMSG_VIDEO_RECORDING: str = "video_recording"; break; + default: str = NULL; break; + } + + return str; +} + + + + +/* + * Local Variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim:set expandtab shiftwidth=4: + */ diff --git a/src/resmsg.h b/src/res-msg.h index eb958da..aeee3ae 100644 --- a/src/resmsg.h +++ b/src/res-msg.h @@ -2,7 +2,6 @@ #define __RES_MESSAGE_H__ #include <stdint.h> -#include <dbus/dbus.h> #define RESMSG_BIT(n) (((uint32_t)1) << (n)) @@ -66,7 +65,7 @@ typedef struct { } resmsg_status_t; -typedef union { +typedef union resmsg_u { resmsg_type_t type; resmsg_any_t any; resmsg_record_t record; @@ -76,15 +75,6 @@ typedef union { } resmsg_t; -DBusMessage *resmsg_compose_dbus_message(const char *, const char *, - const char *, const char *, - resmsg_t *); -DBusMessage *resmsg_reply_dbus_message(DBusMessage *, resmsg_t *); -resmsg_t *resmsg_parse_dbus_message(DBusMessage *, resmsg_t *); - -resmsg_t *resmsg_copy_internal_message(resmsg_t *); -void resmsg_destroy_internal_message(resmsg_t *); - char *resmsg_dump_message(resmsg_t *, int, char *, int); char *resmsg_type_str(resmsg_type_t type); char *resmsg_res_str(uint32_t, char *, int); diff --git a/src/resproto.c b/src/resproto.c index 4ceb08e..c173def 100644 --- a/src/resproto.c +++ b/src/resproto.c @@ -4,8 +4,10 @@ #include <stdarg.h> #include "resproto.h" -#include "dbus.h" -#include "internal.h" +#include "dbus-msg.h" +#include "dbus-proto.h" +#include "internal-msg.h" +#include "internal-proto.h" static resproto_t *resproto_list; diff --git a/src/resproto.h b/src/resproto.h index b9af42d..66fe1a1 100644 --- a/src/resproto.h +++ b/src/resproto.h @@ -1,7 +1,9 @@ #ifndef __RES_PROTO_H__ #define __RES_PROTO_H__ -#include <resmsg.h> +#include <dbus/dbus.h> + +#include <res-msg.h> #include <resset.h> |