return mime;
}
+static char *get_mime_payload_data(DBusMessageIter iter,
+ char **payload, int *payload_len)
+{
+ DBG("");
+
+ if (payload == NULL || payload_len == NULL) {
+ near_error("Payload %p payload_len %p", payload, payload_len);
+ return NULL;
+ }
+
+ while (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INVALID) {
+ const char *key;
+ DBusMessageIter ent_iter;
+ DBusMessageIter var_iter;
+ DBusMessageIter arr_iter;
+
+ dbus_message_iter_recurse(&iter, &ent_iter);
+ dbus_message_iter_get_basic(&ent_iter, &key);
+ dbus_message_iter_next(&ent_iter);
+ dbus_message_iter_recurse(&ent_iter, &var_iter);
+
+ if (g_strcmp0(key, "Payload") == 0) {
+ if (dbus_message_iter_get_arg_type(&var_iter) ==
+ DBUS_TYPE_ARRAY &&
+ dbus_message_iter_get_element_type(&var_iter) ==
+ DBUS_TYPE_BYTE) {
+ dbus_message_iter_recurse(&var_iter,
+ &arr_iter);
+ dbus_message_iter_get_fixed_array(
+ &arr_iter, payload,
+ payload_len);
+ } else {
+ near_error("Unexpected payload type");
+ return NULL;
+ }
+ }
+ dbus_message_iter_next(&iter);
+ }
+
+ return *payload;
+}
+
+static struct near_ndef_message *near_ndef_prepare_mime_payload_record(
+ char *type, char *payload, int payload_len)
+{
+ struct near_ndef_message *mime;
+
+ DBG("Payload %*s", payload_len, payload);
+ mime = ndef_message_alloc_complete(type, payload_len, NULL, 0,
+ RECORD_TNF_MIME, TRUE, TRUE);
+ if (mime == NULL) {
+ near_error("Failed to alloc NDEF message");
+ return NULL;
+ }
+
+ memcpy(mime->data + mime->offset, payload, payload_len);
+
+ return mime;
+}
+
static struct near_ndef_message *build_mime_record(DBusMessage *msg)
{
DBusMessageIter iter, arr_iter;
g_free(carrier);
return mime;
- }
+ } else {
+ /*
+ * Expect data is set in the Payload field of
+ * message.
+ */
+ DBusMessageIter payload_iter;
+ char *payload;
+ int payload_len;
+
+ DBG("mime string %s", mime_str);
+ dbus_message_iter_recurse(&iter, &payload_iter);
+ if (get_mime_payload_data(payload_iter,
+ &payload, &payload_len) == NULL)
+ return NULL;
+ return near_ndef_prepare_mime_payload_record(
+ mime_str, payload, payload_len);
+ }
}
dbus_message_iter_next(&arr_iter);
print " If type is SmartPoster, parameters are <uri>"
print " If type is Handover, parameters are <carrier>"
print " If type is StaticHandover, parameters are <carrier>"
- print " If type is MIME, parameters are <mime_type> (only wifi_wsc)"
+ print " If type is MIME, parameters are <mime_type> (only wifi_wsc and raw)"
+ print " raw is for sending raw payload, parameters are <mime_type> <payload>"
print "e.g. < %s /org/neard/nfc0/device0 Text UTF-8 en-US hello,Type2! >" % (sys.argv[0])
print "e.g. < %s /org/neard/nfc0/device0 URI http://www.nfc-forum.com >" % (sys.argv[0])
print "e.g. < %s /org/neard/nfc0/device0 SmartPoster http://www.nfc-forum.com >" % (sys.argv[0])
print "e.g. < %s /org/neard/nfc0/device0 Handover bluetooth,wifi >" % (sys.argv[0])
print "e.g. < %s /org/neard/nfc0/device0 StaticHandover bluetooth,wifi >" % (sys.argv[0])
print "e.g. < %s /org/neard/nfc0/device0 MIME wifi_wsc>" % (sys.argv[0])
+ print "e.g. < %s /org/neard/nfc0/device0 MIME raw application/xml '<your><xml tags></your>' >" % (sys.argv[0])
sys.exit(1)
if len(sys.argv) < 2:
"Encoding" : sys.argv[3],
"Language" : sys.argv[4],
"Representation" : sys.argv[5] }))
+ elif sys.argv[2] in ["MIME"]:
+ if sys.argv[3] in ["raw"]:
+ device.Push(({ "Type" : "MIME",
+ "MIME" : sys.argv[4],
+ "Payload" : dbus.ByteArray(sys.argv[5]) }))
+ else:
+ help_text()
else:
help_text()