void CameraClient:: onMetadataAvailable(camera_metadata_t *result, camera_metadata_t *charateristic) { ALOGV("onMetadataAvailable"); Mutex::Autolock lock(mLock); // metadata callback // clone camera_metadata_t CameraMetadata result_cb(clone_camera_metadata(result)); CameraMetadata charateristic_cb(clone_camera_metadata(charateristic)); sp<IMetadataCallbacks> remoteCb = mMetadataCallback; if (remoteCb != NULL) { remoteCb->onMetadataReceived(result_cb, charateristic_cb); } }
/* Receive a WKS mail from FP and process it accordingly. On success * the RESULT_CB is called with the mediatype and a stream with the * decrypted data. */ gpg_error_t wks_receive (estream_t fp, gpg_error_t (*result_cb)(void *opaque, const char *mediatype, estream_t data), void *cb_data) { gpg_error_t err; receive_ctx_t ctx; mime_parser_t parser; estream_t plaintext = NULL; int c; ctx = xtrycalloc (1, sizeof *ctx); if (!ctx) return gpg_error_from_syserror (); err = mime_parser_new (&parser, ctx); if (err) goto leave; if (opt.verbose > 1 || opt.debug) mime_parser_set_verbose (parser, opt.debug? 10: 1); mime_parser_set_new_part (parser, new_part); mime_parser_set_part_data (parser, part_data); mime_parser_set_collect_encrypted (parser, collect_encrypted); mime_parser_set_collect_signeddata (parser, collect_signeddata); mime_parser_set_collect_signature (parser, collect_signature); err = mime_parser_parse (parser, fp); if (err) goto leave; if (ctx->key_data) log_info ("key data found\n"); if (ctx->wkd_data) log_info ("wkd data found\n"); if (ctx->plaintext) { if (opt.verbose) log_info ("parsing decrypted message\n"); plaintext = ctx->plaintext; ctx->plaintext = NULL; if (ctx->encrypted) es_rewind (ctx->encrypted); if (ctx->signeddata) es_rewind (ctx->signeddata); if (ctx->signature) es_rewind (ctx->signature); err = mime_parser_parse (parser, plaintext); if (err) return err; } if (!ctx->key_data && !ctx->wkd_data) { log_error ("no suitable data found in the message\n"); err = gpg_error (GPG_ERR_NO_DATA); goto leave; } if (ctx->key_data) { if (opt.debug) { es_rewind (ctx->key_data); log_debug ("Key: '"); log_printf ("\n"); while ((c = es_getc (ctx->key_data)) != EOF) log_printf ("%c", c); log_printf ("'\n"); } if (result_cb) { es_rewind (ctx->key_data); err = result_cb (cb_data, "application/pgp-keys", ctx->key_data); if (err) goto leave; } } if (ctx->wkd_data) { if (opt.debug) { es_rewind (ctx->wkd_data); log_debug ("WKD: '"); log_printf ("\n"); while ((c = es_getc (ctx->wkd_data)) != EOF) log_printf ("%c", c); log_printf ("'\n"); } if (result_cb) { es_rewind (ctx->wkd_data); err = result_cb (cb_data, "application/vnd.gnupg.wks", ctx->wkd_data); if (err) goto leave; } } leave: es_fclose (plaintext); mime_parser_release (parser); es_fclose (ctx->encrypted); es_fclose (ctx->plaintext); es_fclose (ctx->signeddata); es_fclose (ctx->signature); es_fclose (ctx->key_data); es_fclose (ctx->wkd_data); xfree (ctx); return err; }