void FBTestPluginAPI::getURLCallback(const FB::JSObjectPtr& callback, bool success, const FB::HeaderMap& headers, const boost::shared_array<uint8_t>& data, const size_t size) { FB::VariantMap outHeaders; for (FB::HeaderMap::const_iterator it = headers.begin(); it != headers.end(); ++it) { if (headers.count(it->first) > 1) { if (outHeaders.find(it->first) != outHeaders.end()) { outHeaders[it->first].cast<FB::VariantList>().push_back(it->second); } else { outHeaders[it->first] = FB::VariantList(FB::variant_list_of(it->second)); } } else { outHeaders[it->first] = it->second; } } if (success) { std::string dstr(reinterpret_cast<const char*>(data.get()), size); callback->InvokeAsync("", FB::variant_list_of (true) (outHeaders) (dstr) ); } else { callback->InvokeAsync("", FB::variant_list_of(false)); } }
bool BlabbleCall::Transfer(const FB::VariantMap ¶ms) { std::string destination; pj_str_t desturi; BlabbleAccountPtr p = parent_.lock(); if (!p) return false; if (call_id_ == INVALID_CALL) return false; FB::VariantMap::const_iterator iter = params.find("destination"); if (iter == params.end()) { throw FB::script_error("No destination given!"); } else { destination = iter->second.cast<std::string>(); if (destination.size() <= 4 || destination.substr(0, 4) != "sip:") destination = "sip:" + destination + "@" + p->server(); if (p->use_tls() && destination.find("transport=TLS") == std::string::npos) destination += ";transport=TLS"; } if ((iter = params.find("onStatusChange")) != params.end() && iter->second.is_of_type<FB::JSObjectPtr>()) { set_on_transfer_status(iter->second.cast<FB::JSObjectPtr>()); } desturi.ptr = const_cast<char*>(destination.c_str()); desturi.slen = destination.length(); return pjsua_call_xfer(call_id_, &desturi, NULL) == PJ_SUCCESS; }
void PluginCore::setParams(const FB::VariantMap& inParams) { m_params.insert(inParams.begin(), inParams.end()); for (FB::VariantMap::iterator it = m_params.begin(); it != m_params.end(); ++it) { std::string key(it->first); try { std::string value(it->second.convert_cast<std::string>()); if (key.substr(0, 2) == "on") { FB::JSObjectPtr tmp; tmp = m_host->getDOMWindow() ->getProperty<FB::JSObjectPtr>(value); FBLOG_TRACE("PluginCore", "Found <param> event handler: " << key); m_params[key] = tmp; } } catch (const std::exception &ex) { FBLOG_WARN("PluginCore", "Exception processing <param> " << key << ": " << ex.what()); } } }
void btlauncherAPI::gotajax(const FB::JSObjectPtr& callback, bool success, const FB::HeaderMap& headers, const boost::shared_array<uint8_t>& data, const size_t size) { FBLOG_INFO("gotajax()", "START"); FB::VariantMap response; response["allowed"] = true; response["success"] = success; if(!success) { FBLOG_INFO("gotajax()", "unsuccessful"); callback->InvokeAsync("", FB::variant_list_of(response)); FBLOG_INFO("gotajax()", "END"); return; } FB::VariantMap outHeaders; for (FB::HeaderMap::const_iterator it = headers.begin(); it != headers.end(); ++it) { if (headers.count(it->first) > 1) { if (outHeaders.find(it->first) != outHeaders.end()) { outHeaders[it->first].cast<FB::VariantList>().push_back(it->second); } else { outHeaders[it->first] = FB::VariantList(FB::variant_list_of(it->second)); } } else { outHeaders[it->first] = it->second; } } response["headers"] = outHeaders; response["size"] = size; std::string result = std::string((const char*) data.get(), size); response["data"] = result; callback->InvokeAsync("", FB::variant_list_of(response)); FBLOG_INFO("gotajax()", "END"); }
Json::Value variantToJsonValue(const FB::variant &val) { if (val.is_of_type<std::string>()) { return Json::Value(val.convert_cast<std::string>()); } else if (val.is_of_type<FB::VariantMap>()) { Json::Value retVal(Json::objectValue); FB::VariantMap map = val.cast<FB::VariantMap>(); for (FB::VariantMap::iterator it = map.begin(); it != map.end(); ++it) { retVal[it->first] = variantToJsonValue(it->second); } return retVal; } else if (val.is_of_type<FB::VariantList>()) { Json::Value retVal(Json::arrayValue); FB::VariantList list = val.cast<FB::VariantList>(); for (FB::VariantList::iterator it = list.begin(); it != list.end(); ++it) { retVal.append(variantToJsonValue(*it)); } return retVal; } else if (val.is_of_type<int>() || val.is_of_type<char>() || val.is_of_type<short>() || val.is_of_type<long>()) { return Json::Value((Json::Int)val.convert_cast<long>()); } else if (val.is_of_type<unsigned int>() || val.is_of_type<unsigned short>() || val.is_of_type<unsigned char>() || val.is_of_type<unsigned long>()) { return Json::Value((Json::UInt) val.convert_cast<unsigned long>()); } else if (val.is_of_type<double>() || val.is_of_type<float>()) { return Json::Value(val.convert_cast<double>()); } else if (val.is_of_type<bool>()) { return Json::Value(val.convert_cast<bool>()); } else { return Json::Value(Json::nullValue); } }
FB::VariantMap LocalVideoTrack::GetVideoDevices() { static int deviceCount = 0; const size_t kMaxDeviceNameLength = 128; const size_t kMaxUniqueIdLength = 256; char deviceName[kMaxDeviceNameLength]; char deviceUniqueId[kMaxUniqueIdLength]; webrtc::VideoCaptureModule::DeviceInfo* pDevInfo; FB::VariantMap devices; std::string key; std::string val; pDevInfo = webrtc::VideoCaptureFactory::CreateDeviceInfo(0); for(size_t i=0; i<pDevInfo->NumberOfDevices(); i++) { pDevInfo->GetDeviceName(i, deviceName, kMaxDeviceNameLength, deviceUniqueId, kMaxUniqueIdLength); key = deviceUniqueId; val = deviceName; devices[key] = val; if(videoDevices.end() == videoDevices.find(key)) { videoDevices[key] = webrtc::VideoCaptureFactory::Create(deviceCount++, deviceUniqueId); std::string msg("Capture device ["); std::stringstream devIdxStr; msg += deviceUniqueId; msg += "][idx = "; devIdxStr << (deviceCount-1); msg += (devIdxStr.str() + "]"); if(NULL == videoDevices[key]) { devices.erase(key); videoDevices.erase(key); msg += " (failed to open)"; FBLOG_ERROR_CUSTOM("LocalVideoTrack::GetVideoDevices", msg); } else { msg += "..."; FBLOG_INFO_CUSTOM("LocalVideoTrack::GetVideoDevices", msg); } } if((0 == i) && (videoDevices.end() != videoDevices.find(key))) { devices["default"] = key; } } std::stringstream offlineDevices; for(VideoDeviceList::iterator it = videoDevices.begin(); it != videoDevices.end(); it++) { if(devices.end() == devices.find(it->first)) { offlineDevices << (it->first); } } while(offlineDevices) { std::string deviceId; offlineDevices >> deviceId; if("" != deviceId) { videoDevices.erase(deviceId); std::string msg = "Deleting offline device ["; msg += (deviceId + "]..."); FBLOG_INFO_CUSTOM("LocalVideTrack::GetVideoDevices", msg); } } delete pDevInfo; return devices; }
void NpapiBrowserHost::getNPVariant(NPVariant *dst, const FB::variant &var) { if (var.get_type() == typeid(FB::Npapi::NpapiNull)) { dst->type = NPVariantType_Null; } else if (var.get_type() == typeid(int) || var.get_type() == typeid(long) || var.get_type() == typeid(short) || var.get_type() == typeid(char) || var.get_type() == typeid(unsigned int) || var.get_type() == typeid(unsigned short) || var.get_type() == typeid(unsigned char)) { // Integer type dst->type = NPVariantType_Int32; dst->value.intValue = var.convert_cast<long>(); } else if (var.get_type() == typeid(double) || var.get_type() == typeid(float)) { dst->type = NPVariantType_Double; dst->value.doubleValue = var.convert_cast<double>(); } else if (var.get_type() == typeid(bool)) { dst->type = NPVariantType_Bool; dst->value.boolValue = var.convert_cast<bool>(); } else if (var.get_type() == typeid(std::string)) { std::string str = var.convert_cast<std::string>(); char *outStr = (char*)this->MemAlloc(str.size() + 1); memcpy(outStr, str.c_str(), str.size() + 1); dst->type = NPVariantType_String; dst->value.stringValue.UTF8Characters = outStr; dst->value.stringValue.UTF8Length = str.size(); } else if (var.get_type() == typeid(FB::VariantList)) { JSAPI_DOMNode outArr = this->getDOMWindow().createArray(); FB::VariantList inArr = var.cast<FB::VariantList>(); for (FB::VariantList::iterator it = inArr.begin(); it != inArr.end(); it++) { outArr.callMethod<void>("push", variant_list_of(*it)); } FB::AutoPtr<NPObjectAPI> api = dynamic_cast<NPObjectAPI*>(outArr.getJSObject().ptr()); if (api.ptr() != NULL) { dst->type = NPVariantType_Object; dst->value.objectValue = api->getNPObject(); this->RetainObject(dst->value.objectValue); } } else if (var.get_type() == typeid(FB::VariantMap)) { JSAPI_DOMNode out = this->getDOMWindow().createMap(); FB::VariantMap inMap = var.cast<FB::VariantMap>(); for (FB::VariantMap::iterator it = inMap.begin(); it != inMap.end(); it++) { out.setProperty(it->first, it->second); } FB::AutoPtr<NPObjectAPI> api = dynamic_cast<NPObjectAPI*>(out.getJSObject().ptr()); if (api.ptr() != NULL) { dst->type = NPVariantType_Object; dst->value.objectValue = api->getNPObject(); this->RetainObject(dst->value.objectValue); } } else if (var.get_type() == typeid(FB::JSOutObject)) { NPObject *outObj = NULL; FB::JSOutObject obj = var.cast<FB::JSOutObject>(); NPObjectAPI *tmpObj = dynamic_cast<NPObjectAPI *>(obj.ptr()); if (tmpObj == NULL) { outObj = NPJavascriptObject::NewObject(this, obj); } else { outObj = tmpObj->getNPObject(); this->RetainObject(outObj); } dst->type = NPVariantType_Object; dst->value.objectValue = outObj; } else if (var.get_type() == typeid(FB::JSObject)) { NPObject *outObj = NULL; FB::JSObject obj = var.cast<JSObject>(); NPObjectAPI *tmpObj = dynamic_cast<NPObjectAPI *>(obj.ptr()); if (tmpObj == NULL) { outObj = NPJavascriptObject::NewObject(this, obj); } else { outObj = tmpObj->getNPObject(); this->RetainObject(outObj); } dst->type = NPVariantType_Object; dst->value.objectValue = outObj; } // TODO: implement object types }