void CDropbox::SendToContact(MCONTACT hContact, const char* data) { if (hContact == GetDefaultContact()) { char *message = mir_utf8encode(data); AddEventToDb(hContact, EVENTTYPE_MESSAGE, DBEF_UTF, mir_strlen(message), (PBYTE)message); return; } const char *szProto = GetContactProto(hContact); if (db_get_b(hContact, szProto, "ChatRoom", 0) == TRUE) { ptrT tszChatRoom(db_get_tsa(hContact, szProto, "ChatRoomID")); GCDEST gcd = { szProto, tszChatRoom, GC_EVENT_SENDMESSAGE }; GCEVENT gce = { sizeof(gce), &gcd }; gce.bIsMe = TRUE; gce.dwFlags = GCEF_ADDTOLOG; gce.ptszText = mir_utf8decodeT(data); gce.time = time(NULL); CallServiceSync(MS_GC_EVENT, WINDOW_VISIBLE, (LPARAM)&gce); mir_free((void*)gce.ptszText); return; } if (CallContactService(hContact, PSS_MESSAGE, 0, (LPARAM)data) != ACKRESULT_FAILED) { char *message = mir_utf8encode(data); AddEventToDb(hContact, EVENTTYPE_MESSAGE, DBEF_UTF | DBEF_SENT, mir_strlen(message), (PBYTE)message); } }
static void MapToTable(lua_State *L, const PROTOACCOUNT* pa) { lua_newtable(L); lua_pushliteral(L, "ModuleName"); lua_pushstring(L, ptrA(mir_utf8encode(pa->szModuleName))); lua_settable(L, -3); lua_pushliteral(L, "AccountName"); lua_pushstring(L, ptrA(mir_utf8encodeT(pa->tszAccountName))); lua_settable(L, -3); lua_pushliteral(L, "ProtoName"); lua_pushstring(L, ptrA(mir_utf8encode(pa->szProtoName))); lua_settable(L, -3); lua_pushliteral(L, "IsEnabled"); lua_pushboolean(L, pa->bIsEnabled); lua_settable(L, -3); lua_pushliteral(L, "IsVisible"); lua_pushboolean(L, pa->bIsVisible); lua_settable(L, -3); lua_pushliteral(L, "IsVirtual"); lua_pushboolean(L, pa->bIsVirtual); lua_settable(L, -3); lua_pushliteral(L, "IsOldProto"); lua_pushboolean(L, pa->bOldProto); lua_settable(L, -3); }
int OpenBayes() { char bayesdb_fullpath[MAX_PATH]; char *bayesdb_fullpath_utf8; char *errmsg, *tmp; sqlite3_stmt *stmt; if (hBayesFolder) { FoldersGetCustomPath(hBayesFolder, bayesdb_fullpath, MAX_PATH, ""); } else { tmp = Utils_ReplaceVars("%miranda_userdata%"); if (tmp[mir_strlen(tmp)-1] == '\\') tmp[mir_strlen(tmp)-1] = 0; mir_strcpy(bayesdb_fullpath, tmp); mir_strcat(bayesdb_fullpath, "\\" BAYESDB_PATH); mir_free(tmp); } CreateDirectoryTree(bayesdb_fullpath); mir_strcat(bayesdb_fullpath, "\\" BAYESDB_FILENAME); bayesdb_fullpath_utf8 = mir_utf8encode(bayesdb_fullpath); if (sqlite3_open(bayesdb_fullpath_utf8, &bayesdb) == SQLITE_OK) { sqlite3_exec(bayesdb, "CREATE TABLE IF NOT EXISTS spam (token blob(16), num int)", NULL, NULL, &errmsg); sqlite3_exec(bayesdb, "CREATE TABLE IF NOT EXISTS ham (token blob(16), num int)", NULL, NULL, &errmsg); sqlite3_exec(bayesdb, "CREATE TABLE IF NOT EXISTS stats (key varchar(32), value int)", NULL, NULL, &errmsg); sqlite3_exec(bayesdb, "CREATE TABLE IF NOT EXISTS queue (contact int, msgtime int, message text)", NULL, NULL, &errmsg); sqlite3_prepare_v2(bayesdb, "SELECT count(1) FROM stats WHERE key='spam_msgcount' OR key='ham_msgcount'", -1, &stmt, NULL); if (sqlite3_step(stmt) == SQLITE_ROW) if (sqlite3_column_int(stmt, 0) != 2) { sqlite3_exec(bayesdb, "INSERT INTO stats VALUES ('spam_msgcount', 0)", NULL, NULL, NULL); sqlite3_exec(bayesdb, "INSERT INTO stats VALUES ('ham_msgcount', 0)", NULL, NULL, NULL); } } else { MessageBoxA(NULL, bayesdb_fullpath_utf8, "Can't open database", MB_OK); } mir_free(bayesdb_fullpath_utf8); #ifdef _DEBUG tmp = Utils_ReplaceVars("%miranda_userdata%"); if (tmp[mir_strlen(tmp)-1] == '\\') tmp[mir_strlen(tmp)-1] = 0; mir_snprintf(bayesdb_fullpath, "%s\\%s\\%s", tmp, BAYESDB_PATH, BAYESDBG_FILENAME); mir_free(tmp); bayesdb_fullpath_utf8 = mir_utf8encode(bayesdb_fullpath); if (sqlite3_open(bayesdb_fullpath_utf8, &bayesdbg) == SQLITE_OK) { sqlite3_exec(bayesdbg, "CREATE TABLE spam (token varchar(50), num int)", NULL, NULL, &errmsg); sqlite3_exec(bayesdbg, "CREATE TABLE ham (token varchar(50), num int)", NULL, NULL, &errmsg); } mir_free(bayesdb_fullpath_utf8); #endif return 0; }
static int dbei__index(lua_State *L) { DBEVENTINFO *dbei = (DBEVENTINFO*)luaL_checkudata(L, 1, MT_DBEVENTINFO); const char *key = luaL_checkstring(L, 2); if (mir_strcmpi(key, "Module") == 0) lua_pushstring(L, ptrA(mir_utf8encode(dbei->szModule))); else if (mir_strcmpi(key, "Timestamp") == 0) lua_pushnumber(L, dbei->timestamp); else if (mir_strcmpi(key, "Type") == 0) lua_pushinteger(L, dbei->eventType); else if (mir_strcmpi(key, "Flags") == 0) lua_pushinteger(L, dbei->flags); else if (mir_strcmpi(key, "Length") == 0) lua_pushnumber(L, dbei->cbBlob); else if (mir_strcmpi(key, "Blob") == 0) { lua_newtable(L); for (DWORD i = 0; i < dbei->cbBlob; i++) { lua_pushinteger(L, i + 1); lua_pushinteger(L, dbei->pBlob[i]); lua_settable(L, -3); } } else lua_pushnil(L); return 1; }
void CDropbox::CommandDelete(void *arg) { CommandParam *param = (CommandParam*)arg; char *path = (char*)param->data; if (path == NULL) { CMStringA error(FORMAT, T2Utf(TranslateT("\"%s\" command has invalid parameter.\nUse \"/help\" for more info.")), "/delete"); ProtoBroadcastAck(MODULE, param->hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, param->hProcess, 0); CallContactService(param->instance->GetDefaultContact(), PSR_MESSAGE, 0, (LPARAM)error.GetBuffer()); return; } ptrA token(db_get_sa(NULL, MODULE, "TokenSecret")); ptrA encodedPath(mir_utf8encode(path)); DeleteRequest request(token, encodedPath); NLHR_PTR response(request.Send(param->instance->hNetlibConnection)); if (response == NULL || response->resultCode != HTTP_STATUS_OK) { ProtoBroadcastAck(MODULE, param->hContact, ACKTYPE_MESSAGE, ACKRESULT_FAILED, param->hProcess, 0); return; } JSONNode root = JSONNode::parse(response->pData); if (root.empty()) { ProtoBroadcastAck(MODULE, param->hContact, ACKTYPE_MESSAGE, ACKRESULT_FAILED, param->hProcess, 0); return; } bool isDeleted = root.at("is_deleted").as_bool(); CMStringA message(FORMAT, "%s %s", path, !isDeleted ? T2Utf(TranslateT("is not deleted")) : T2Utf(TranslateT("is deleted"))); ProtoBroadcastAck(MODULE, param->hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, param->hProcess, 0); CallContactService(param->instance->GetDefaultContact(), PSR_MESSAGE, 0, (LPARAM)message.GetBuffer()); }
int MsgWindowEventHookEventObjParam(void *obj, WPARAM wParam, LPARAM lParam, LPARAM param) { lua_State *L = (lua_State*)obj; int ref = param; lua_rawgeti(L, LUA_REGISTRYINDEX, ref); lua_pushnumber(L, wParam); MessageWindowEventData *ev = (MessageWindowEventData*)lParam; lua_newtable(L); lua_pushliteral(L, "Module"); lua_pushstring(L, ptrA(mir_utf8encode(ev->szModule))); lua_settable(L, -3); lua_pushliteral(L, "Type"); lua_pushinteger(L, ev->uType); lua_settable(L, -3); lua_pushliteral(L, "hContact"); lua_pushinteger(L, ev->hContact); lua_settable(L, -3); lua_pushliteral(L, "Flags"); lua_pushinteger(L, ev->uFlags); lua_settable(L, -3); if (lua_pcall(L, 2, 1, 0)) printf("%s\n", lua_tostring(L, -1)); int res = (int)lua_tointeger(L, 1); return res; }
int __cdecl CYahooProto::SendMsg( HANDLE hContact, int flags, const char* pszSrc ) { if (!m_bLoggedIn) {/* don't send message if we not connected! */ ForkThread( &CYahooProto::im_sendackfail, hContact ); return 1; } ptrA msg; if (flags & PREF_UNICODE) /* convert to utf8 */ msg = mir_utf8encodeW(( wchar_t* )&pszSrc[ strlen(pszSrc)+1 ] ); else if ( flags & PREF_UTF ) msg = mir_strdup(pszSrc); else msg = mir_utf8encode(pszSrc); if (lstrlenA(msg) > 800) { ForkThread( &CYahooProto::im_sendackfail_longmsg, hContact ); return 1; } DBVARIANT dbv; if (!getString( hContact, YAHOO_LOGINID, &dbv)) { send_msg(dbv.pszVal, getWord( hContact, "yprotoid", 0), msg, 1); ForkThread( &CYahooProto::im_sendacksuccess, hContact ); db_free(&dbv); return 1; } return 0; }
void CDropbox::CommandShare(void *arg) { CommandParam *param = (CommandParam*)arg; char *path = (char*)param->data; if (path == NULL) { CMStringA error(FORMAT, T2Utf(TranslateT("\"%s\" command has invalid parameter.\nUse \"/help\" for more info.")), "/share"); ProtoBroadcastAck(MODULE, param->hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, param->hProcess, 0); CallContactService(param->instance->GetDefaultContact(), PSR_MESSAGE, 0, (LPARAM)error.GetBuffer()); return; } ptrA token(db_get_sa(NULL, MODULE, "TokenSecret")); ptrA encodedPath(mir_utf8encode(path)); bool useShortUrl = db_get_b(NULL, MODULE, "UseSortLinks", 1) > 0; ShareRequest request(token, encodedPath, useShortUrl); NLHR_PTR response(request.Send(param->instance->hNetlibConnection)); if (response == NULL || response->resultCode != HTTP_STATUS_OK) { ProtoBroadcastAck(MODULE, param->hContact, ACKTYPE_MESSAGE, ACKRESULT_FAILED, param->hProcess, 0); return; } JSONNode root = JSONNode::parse(response->pData); if (root.empty()) { ProtoBroadcastAck(MODULE, param->hContact, ACKTYPE_MESSAGE, ACKRESULT_FAILED, param->hProcess, 0); return; } CMStringA link = root.at("url").as_string().c_str(); ProtoBroadcastAck(MODULE, param->hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, param->hProcess, 0); CallContactService(param->instance->GetDefaultContact(), PSR_MESSAGE, 0, (LPARAM)link.GetBuffer()); }
HANDLE CYahooProto::AddToList( int flags, PROTOSEARCHRESULT* psr ) { debugLogA("[YahooAddToList] Flags: %d", flags); if (!m_bLoggedIn) { debugLogA("[YahooAddToList] WARNING: WE ARE OFFLINE!"); return 0; } if (psr == NULL || psr->cbSize != sizeof( PROTOSEARCHRESULT )) { debugLogA("[YahooAddToList] Empty data passed?"); return 0; } char *id = psr->flags & PSR_UNICODE ? mir_utf8encodeW((wchar_t*)psr->id) : mir_utf8encode((char*)psr->id); HANDLE hContact = getbuddyH(id); if (hContact != NULL) { if (db_get_b(hContact, "CList", "NotOnList", 0)) { debugLogA("[YahooAddToList] Temporary Buddy:%s already on our buddy list", id); //return 0; } else { debugLogA("[YahooAddToList] Buddy:%s already on our buddy list", id); mir_free(id); return 0; } } else if (flags & PALF_TEMPORARY) { /* not on our list */ debugLogA("[YahooAddToList] Adding Temporary Buddy:%s ", id); } int protocol = psr->reserved[0]; debugLogA("Adding buddy:%s", id); hContact = add_buddy(id, id, protocol, flags); mir_free(id); return hContact; }
int CVkProto::SendMsg(HANDLE hContact, int flags, const char *msg) { LONG userID = getDword(hContact, "ID", -1); if (userID == -1) return 0; ptrA szMsg; if (flags & PREF_UTF) szMsg = mir_strdup(msg); else if (flags & PREF_UNICODE) msg = mir_utf8encodeW((wchar_t*)&msg[strlen(msg)+1]); else msg = mir_utf8encode(msg); ULONG msgId = ::InterlockedIncrement(&m_msgId); AsyncHttpRequest *pReq = new AsyncHttpRequest(this, REQUEST_GET, "/method/messages.send.json", true, &CVkProto::OnSendMessage) << INT_PARAM("type", 0) << INT_PARAM("uid", userID) << CHAR_PARAM("message", msg); pReq->pData = (char*)hContact; pReq->pUserInfo = (void*)msgId; Push(pReq); if (!m_bServerDelivery) ForkThread(&CVkProto::SendMsgAck, new TFakeAckParams(hContact, msgId)); return msgId; }
/** Return true on success, false on error. */ bool FacebookProto::NegotiateConnection() { debugLogA("*** Negotiating connection with Facebook"); ptrA username(getStringA(FACEBOOK_KEY_LOGIN)); if (!username || !mir_strlen(username)) { NotifyEvent(m_tszUserName, TranslateT("Please enter a username."), NULL, FACEBOOK_EVENT_CLIENT); return false; } ptrA password(getStringA(FACEBOOK_KEY_PASS)); if (!password || !*password) { NotifyEvent(m_tszUserName, TranslateT("Please enter a password."), NULL, FACEBOOK_EVENT_CLIENT); return false; } password = mir_utf8encode(password); // Refresh last time of feeds update facy.last_feeds_update_ = ::time(NULL); // Generate random clientid for this connection facy.chat_clientid_ = utils::text::rand_string(8, "0123456789abcdef", &facy.random_); // Create default group for new contacts if (m_tszDefaultGroup) Clist_CreateGroup(0, m_tszDefaultGroup); return facy.login(username, password); }
static void MapToTable(lua_State *L, const PROTOCOLDESCRIPTOR* pd) { lua_newtable(L); lua_pushliteral(L, "Name"); lua_pushstring(L, ptrA(mir_utf8encode(pd->szName))); lua_settable(L, -3); lua_pushliteral(L, "Type"); lua_pushinteger(L, pd->type); lua_settable(L, -3); }
static int SettingsChangedHookEventObjParam(void *obj, WPARAM wParam, LPARAM lParam, LPARAM param) { lua_State *L = (lua_State*)obj; int ref = param; lua_rawgeti(L, LUA_REGISTRYINDEX, ref); lua_pushnumber(L, wParam); DBCONTACTWRITESETTING *dbcws = (DBCONTACTWRITESETTING*)lParam; lua_newtable(L); lua_pushliteral(L, "Module"); lua_pushstring(L, dbcws->szModule); lua_settable(L, -3); lua_pushliteral(L, "Setting"); lua_pushstring(L, dbcws->szSetting); lua_settable(L, -3); lua_pushliteral(L, "Value"); switch (dbcws->value.type) { case DBVT_BYTE: lua_pushinteger(L, dbcws->value.bVal); break; case DBVT_WORD: lua_pushinteger(L, dbcws->value.wVal); break; case DBVT_DWORD: lua_pushnumber(L, dbcws->value.dVal); break; case DBVT_ASCIIZ: lua_pushstring(L, ptrA(mir_utf8encode(dbcws->value.pszVal))); break; case DBVT_UTF8: lua_pushstring(L, dbcws->value.pszVal); break; case DBVT_WCHAR: lua_pushstring(L, ptrA(mir_utf8encodeW(dbcws->value.pwszVal))); break; default: lua_pushvalue(L, 4); return 1; } lua_settable(L, -3); if (lua_pcall(L, 2, 1, 0)) printf("%s\n", lua_tostring(L, -1)); int res = (int)lua_tointeger(L, 1); return res; }
int CAimProto::OnDbSettingChanged(WPARAM wParam,LPARAM lParam) { DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING*)lParam; if (strcmp(cws->szModule, MOD_KEY_CL) == 0 && state == 1 && wParam) { HANDLE hContact = (HANDLE)wParam; if (strcmp(cws->szSetting, AIM_KEY_NL) == 0) { if (cws->value.type == DBVT_DELETED) { DBVARIANT dbv; if(!DBGetContactSettingStringUtf(hContact, MOD_KEY_CL, OTH_KEY_GP, &dbv) && dbv.pszVal[0]) { add_contact_to_group(hContact, dbv.pszVal); DBFreeVariant(&dbv); } else add_contact_to_group(hContact, AIM_DEFAULT_GROUP); } } else if (strcmp(cws->szSetting, "MyHandle") == 0) { char* name; switch (cws->value.type) { case DBVT_DELETED: set_local_nick(hContact, NULL, NULL); break; case DBVT_ASCIIZ: name = mir_utf8encode(cws->value.pszVal); set_local_nick(hContact, name, NULL); mir_free(name); break; case DBVT_UTF8: set_local_nick(hContact, cws->value.pszVal, NULL); break; case DBVT_WCHAR: name = mir_utf8encodeW(cws->value.pwszVal); set_local_nick(hContact, name, NULL); mir_free(name); break; } } } return 0; }
static int pd__index(lua_State *L) { PROTOCOLDESCRIPTOR *pd = *(PROTOCOLDESCRIPTOR**)luaL_checkudata(L, 1, MT_PROTOCOLDESCRIPTOR); const char *key = lua_tostring(L, 2); if (mir_strcmpi(key, "Name") == 0) lua_pushstring(L, ptrA(mir_utf8encode(pd->szName))); else if (mir_strcmpi(key, "Type") == 0) lua_pushinteger(L, pd->type); else lua_pushnil(L); return 1; }
logtofile& logtofile::operator<<(string buf) { if(_bDebugLog != bDebugLog) init(); log_mutex.lock(); char *tmp = mir_utf8encode(buf.c_str()); log.open(toUTF8(path).c_str(), std::ios::app |std::ios::ate); log<<tmp; log<<"\n"; log.close(); log_mutex.unlock(); mir_free(tmp); return *this; }
static int pa__index(lua_State *L) { PROTOACCOUNT *pa = *(PROTOACCOUNT**)luaL_checkudata(L, 1, MT_PROTOACCOUNT); const char *key = lua_tostring(L, 2); if (mir_strcmpi(key, "ModuleName") == 0) lua_pushstring(L, ptrA(mir_utf8encode(pa->szModuleName))); else if (mir_strcmpi(key, "AccountName") == 0) lua_pushstring(L, ptrA(mir_utf8encodeT(pa->tszAccountName))); else if (mir_strcmpi(key, "ProtoName") == 0) lua_pushstring(L, ptrA(mir_utf8encode(pa->szProtoName))); else if (mir_strcmpi(key, "IsEnabled") == 0) lua_pushboolean(L, pa->bIsEnabled); else if (mir_strcmpi(key, "IsVisible") == 0) lua_pushboolean(L, pa->bIsVisible); else if (mir_strcmpi(key, "IsVirtual") == 0) lua_pushboolean(L, pa->bIsVirtual); else if (mir_strcmpi(key, "IsOldProto") == 0) lua_pushboolean(L, pa->bOldProto); else lua_pushnil(L); return 1; }
void FacebookProto::SendChatMsgWorker(void *p) { if (p == NULL) return; send_chat *data = static_cast<send_chat*>(p); std::string err_message; // replace %% back to %, because chat automatically does this to sent messages utils::text::replace_all(&data->msg, "%%", "%"); MCONTACT hContact = ChatIDToHContact(data->chat_id); if (hContact) { ptrA tid_(getStringA(hContact, FACEBOOK_KEY_TID)); std::string tid; if (tid_ != NULL && mir_strcmp(tid_, "null")) { tid = tid_; } else { std::string post_data = "client=mercury"; post_data += "&__user="******"&__dyn=" + facy.__dyn(); post_data += "&__req=" + facy.__req(); post_data += "&fb_dtsg=" + facy.dtsg_; post_data += "&ttstamp=" + facy.ttstamp_; post_data += "&__rev=" + facy.__rev(); post_data += "&threads[thread_ids][0]=" + utils::url::encode(data->chat_id); http::response resp = facy.flap(REQUEST_THREAD_INFO, &post_data); // NOTE: Request revised 1.9.2015 tid = utils::text::source_get_value(&resp.data, 2, "\"thread_id\":\"", "\""); if (!tid.empty() && tid.compare("null")) setString(hContact, FACEBOOK_KEY_TID, tid.c_str()); debugLogA(" Got thread info: %s = %s", data->chat_id.c_str(), tid.c_str()); } if (!tid.empty()) { if (facy.send_message(0, hContact, data->msg, &err_message) == SEND_MESSAGE_OK) UpdateChat(data->chat_id.c_str(), facy.self_.user_id.c_str(), facy.self_.real_name.c_str(), data->msg.c_str()); else { ptrA text(mir_utf8encode(err_message.c_str())); UpdateChat(data->chat_id.c_str(), NULL, NULL, text); } } } delete data; }
static INT_PTR GetContactSettingStr(WPARAM wParam, LPARAM lParam) { DBCONTACTGETSETTING* dgs = (DBCONTACTGETSETTING*)lParam; int iSaveType = dgs->pValue->type; if ( GetContactSettingWorker(( HANDLE )wParam, dgs, 0 )) return 1; if ( iSaveType == 0 || iSaveType == dgs->pValue->type ) return 0; if ( dgs->pValue->type != DBVT_ASCIIZ && dgs->pValue->type != DBVT_UTF8 ) return 1; if ( iSaveType == DBVT_WCHAR ) { if ( dgs->pValue->type != DBVT_UTF8 ) { int len = MultiByteToWideChar( CP_ACP, 0, dgs->pValue->pszVal, -1, NULL, 0 ); wchar_t* wszResult = ( wchar_t* )mir_alloc(( len+1 )*sizeof( wchar_t )); if ( wszResult == NULL ) return 1; MultiByteToWideChar( CP_ACP, 0, dgs->pValue->pszVal, -1, wszResult, len ); wszResult[ len ] = 0; mir_free( dgs->pValue->pszVal ); dgs->pValue->pwszVal = wszResult; } else { char* savePtr = NEWSTR_ALLOCA(dgs->pValue->pszVal); mir_free( dgs->pValue->pszVal ); if ( !mir_utf8decode( savePtr, &dgs->pValue->pwszVal )) return 1; } } else if ( iSaveType == DBVT_UTF8 ) { char* tmpBuf = mir_utf8encode( dgs->pValue->pszVal ); if ( tmpBuf == NULL ) return 1; mir_free( dgs->pValue->pszVal ); dgs->pValue->pszVal = tmpBuf; } else if ( iSaveType == DBVT_ASCIIZ ) mir_utf8decode( dgs->pValue->pszVal, NULL ); dgs->pValue->type = iSaveType; return 0; }
static int lua_GetEvent(lua_State *L) { ObsoleteMethod(L, "Use totable(x, \"DBEVENTINFO\") instead"); MEVENT hEvent = luaL_checkinteger(L, 1); DBEVENTINFO dbei = { sizeof(DBEVENTINFO) }; dbei.cbBlob = db_event_getBlobSize(hEvent); dbei.pBlob = (PBYTE)mir_calloc(dbei.cbBlob); int res = ::db_event_get(hEvent, &dbei); if (res) { lua_pushnil(L); return 1; } lua_newtable(L); lua_pushliteral(L, "Module"); lua_pushstring(L, ptrA(mir_utf8encode(dbei.szModule))); lua_settable(L, -3); lua_pushliteral(L, "Timestamp"); lua_pushnumber(L, dbei.timestamp); lua_settable(L, -3); lua_pushliteral(L, "Type"); lua_pushinteger(L, dbei.eventType); lua_settable(L, -3); lua_pushliteral(L, "Flags"); lua_pushinteger(L, dbei.flags); lua_settable(L, -3); lua_pushliteral(L, "Length"); lua_pushnumber(L, dbei.cbBlob); lua_settable(L, -3); lua_pushliteral(L, "Blob"); lua_newtable(L); for (DWORD i = 0; i < dbei.cbBlob; i++) { lua_pushinteger(L, i + 1); lua_pushinteger(L, dbei.pBlob[i]); lua_settable(L, -3); } lua_settable(L, -3); mir_free(dbei.pBlob); return 1; }
void CDropbox::CommandContent(void *arg) { CommandParam *param = (CommandParam*)arg; char *path = (char*)param->data; if (path == NULL) path = ""; ptrA token(db_get_sa(NULL, MODULE, "TokenSecret")); ptrA encodedPath(mir_utf8encode(path)); GetMetadataRequest request(token, encodedPath); NLHR_PTR response(request.Send(param->instance->hNetlibConnection)); if (response == NULL || response->resultCode != HTTP_STATUS_OK) { ProtoBroadcastAck(MODULE, param->hContact, ACKTYPE_MESSAGE, ACKRESULT_FAILED, param->hProcess, 0); return; } JSONNode root = JSONNode::parse(response->pData); if (root.empty()) { ProtoBroadcastAck(MODULE, param->hContact, ACKTYPE_MESSAGE, ACKRESULT_FAILED, param->hProcess, 0); return; } CMStringA message; bool isDir = root.at("is_dir").as_bool(); if (!isDir) message.AppendFormat("\"%s\" %s", encodedPath, T2Utf(TranslateT("is file"))); else { JSONNode content = root.at("contents").as_array(); for (size_t i = 0; i < content.size(); i++) { JSONNode item = content[i]; if (item.empty()) { if (i == 0) message.AppendFormat("\"%s\" %s", encodedPath, T2Utf(TranslateT("is empty"))); break; } CMStringA subName(item.at("path").as_string().c_str()); message.AppendFormat("%s\n", (subName[0] == '/') ? subName.Mid(1) : subName); } } ProtoBroadcastAck(MODULE, param->hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, param->hProcess, 0); CallContactService(param->instance->GetDefaultContact(), PSR_MESSAGE, 0, (LPARAM)message.GetBuffer()); }
STDMETHODIMP_(BOOL) CDb3Mmap::GetContactSettingStr(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting, DBVARIANT *dbv) { int iSaveType = dbv->type; if (GetContactSettingWorker(contactID, szModule, szSetting, dbv, 0)) return 1; if (iSaveType == 0 || iSaveType == dbv->type) return 0; if (dbv->type != DBVT_ASCIIZ && dbv->type != DBVT_UTF8) return 1; if (iSaveType == DBVT_WCHAR) { if (dbv->type != DBVT_UTF8) { int len = MultiByteToWideChar(CP_ACP, 0, dbv->pszVal, -1, NULL, 0); wchar_t* wszResult = (wchar_t*)mir_alloc((len + 1)*sizeof(wchar_t)); if (wszResult == NULL) return 1; MultiByteToWideChar(CP_ACP, 0, dbv->pszVal, -1, wszResult, len); wszResult[len] = 0; mir_free(dbv->pszVal); dbv->pwszVal = wszResult; } else { char* savePtr = NEWSTR_ALLOCA(dbv->pszVal); mir_free(dbv->pszVal); if (!mir_utf8decode(savePtr, &dbv->pwszVal)) return 1; } } else if (iSaveType == DBVT_UTF8) { char* tmpBuf = mir_utf8encode(dbv->pszVal); if (tmpBuf == NULL) return 1; mir_free(dbv->pszVal); dbv->pszVal = tmpBuf; } else if (iSaveType == DBVT_ASCIIZ) mir_utf8decode(dbv->pszVal, NULL); dbv->type = iSaveType; return 0; }
/** * name: SetName * class: CPsTreeItem * desc: set the unique name for this item from a given title as it comes with OPTIONDIALOGPAGE * param: ptszTitle - the title which is the base for the unique name * bIsUnicode - if TRUE the title is unicode * return: 0 on success, 1 to 4 indicating the failed operation **/ int CPsTreeItem::Name(LPTSTR ptszTitle, const BYTE bIsUnicode) { // convert title to utf8 _pszName = (bIsUnicode) ? mir_utf8encodeW((LPWSTR)ptszTitle) : mir_utf8encode((LPSTR)ptszTitle); if (_pszName) { // convert disallowed characters for (DWORD i = 0; _pszName[i] != 0; i++) { switch (_pszName[i]) { case '{': _pszName[i] = '('; break; case '}': _pszName[i] = ')'; break; } } } return _pszName == NULL; }
static int lua_GetSetting(lua_State *L) { MCONTACT hContact = lua_tointeger(L, 1); LPCSTR szModule = luaL_checkstring(L, 2); LPCSTR szSetting = luaL_checkstring(L, 3); DBVARIANT dbv; if (db_get(hContact, szModule, szSetting, &dbv)) { lua_pushvalue(L, 4); return 1; } switch (dbv.type) { case DBVT_BYTE: lua_pushinteger(L, dbv.bVal); break; case DBVT_WORD: lua_pushinteger(L, dbv.wVal); break; case DBVT_DWORD: lua_pushnumber(L, dbv.dVal); break; case DBVT_ASCIIZ: lua_pushstring(L, ptrA(mir_utf8encode(dbv.pszVal))); break; case DBVT_UTF8: lua_pushstring(L, dbv.pszVal); break; case DBVT_WCHAR: lua_pushstring(L, ptrA(mir_utf8encodeW(dbv.pwszVal))); break; default: db_free(&dbv); lua_pushvalue(L, 4); return 1; } db_free(&dbv); return 1; }
int __cdecl CYahooProto::SendMsg( HANDLE hContact, int flags, const char* pszSrc ) { DBVARIANT dbv; char *msg; int bANSI; bANSI = 0;/*GetByte( "DisableUTF8", 0 );*/ if (!m_bLoggedIn) {/* don't send message if we not connected! */ YForkThread( &CYahooProto::im_sendackfail, hContact ); return 1; } if (bANSI) /* convert to ANSI */ msg = ( char* )pszSrc; else if ( flags & PREF_UNICODE ) /* convert to utf8 */ msg = mir_utf8encodeW(( wchar_t* )&pszSrc[ strlen(pszSrc)+1 ] ); else if ( flags & PREF_UTF ) msg = mir_strdup(( char* )pszSrc ); else msg = mir_utf8encode(( char* )pszSrc ); if (lstrlenA(msg) > 800) { YForkThread( &CYahooProto::im_sendackfail_longmsg, hContact ); return 1; } if (!DBGetContactSettingString( hContact, m_szModuleName, YAHOO_LOGINID, &dbv)) { send_msg(dbv.pszVal, GetWord( hContact, "yprotoid", 0), msg, (!bANSI) ? 1 : 0); if (!bANSI) mir_free(msg); YForkThread( &CYahooProto::im_sendacksuccess, hContact ); DBFreeVariant(&dbv); return 1; } return 0; }
LPSTR __cdecl pgp_decode(HANDLE context, LPCSTR szEncMsg) { pCNTX ptr = get_context_on_id(context); if (!ptr) return NULL; mir_free(ptr->tmp); LPSTR szNewMsg = NULL; LPSTR szOldMsg = pgp_decrypt(ptr, szEncMsg); if (szOldMsg) { if (!is_7bit_string(szOldMsg) && !is_utf8_string(szOldMsg)) { szNewMsg = mir_utf8encode(szOldMsg); } else szNewMsg = mir_strdup(szOldMsg); } return ptr->tmp = szNewMsg; }
static int lua_DecodeDBCONTACTWRITESETTING(lua_State *L) { ObsoleteMethod(L, "Use totable(x, \"DBCONTACTWRITESETTING\") instead"); DBCONTACTWRITESETTING *pDBCWS = (DBCONTACTWRITESETTING*)lua_tointeger(L, 1); lua_newtable(L); lua_pushliteral(L, "Module"); lua_pushstring(L, pDBCWS->szModule); lua_settable(L, -3); lua_pushliteral(L, "Setting"); lua_pushstring(L, pDBCWS->szSetting); lua_settable(L, -3); lua_pushliteral(L, "Value"); switch (pDBCWS->value.type) { case DBVT_BYTE: lua_pushinteger(L, pDBCWS->value.bVal); break; case DBVT_WORD: lua_pushinteger(L, pDBCWS->value.wVal); break; case DBVT_DWORD: lua_pushnumber(L, pDBCWS->value.dVal); break; case DBVT_ASCIIZ: lua_pushstring(L, ptrA(mir_utf8encode(pDBCWS->value.pszVal))); break; case DBVT_UTF8: lua_pushstring(L, pDBCWS->value.pszVal); break; case DBVT_WCHAR: lua_pushstring(L, ptrA(mir_utf8encodeW(pDBCWS->value.pwszVal))); break; default: lua_pushvalue(L, 4); return 1; } lua_settable(L, -3); return 1; }
static int lua_EnumSettings(lua_State *L) { ObsoleteMethod(L, "Use \"for x in db.AllSettings \" instead"); LPCSTR szModule = luaL_checkstring(L, 1); MCONTACT hContact = lua_tointeger(L, 2); if (!lua_isfunction(L, 3)) { lua_pushlightuserdata(L, NULL); return 1; } lua_pushvalue(L, 3); int ref = luaL_ref(L, LUA_REGISTRYINDEX); enumDBSettingsParam param = { 0, NULL }; DBCONTACTENUMSETTINGS dbces = { 0 }; dbces.pfnEnumProc = SettingsEnumProc; dbces.szModule = szModule; dbces.ofsSettings = 0; dbces.lParam = (LPARAM)¶m; INT_PTR res = ::CallService(MS_DB_CONTACT_ENUMSETTINGS, hContact, (LPARAM)&dbces); for (int i = 0; i < param.count; i++) { lua_rawgeti(L, LUA_REGISTRYINDEX, ref); lua_pushstring(L, mir_utf8encode(param.pszSettingName[i])); if (lua_pcall(L, 1, 0, 0)) CallService(MS_NETLIB_LOG, (WPARAM)hNetlib, (LPARAM)lua_tostring(L, -1)); mir_free(param.pszSettingName[i]); } mir_free(param.pszSettingName); luaL_unref(L, LUA_REGISTRYINDEX, ref); lua_pushinteger(L, res); return 1; }
LUAMOD_API int luaopen_m_core(lua_State *L) { luaL_newlib(L, coreApi); lua_pushlightuserdata(L, NULL); lua_setfield(L, -2, "NULL"); lua_pushlightuserdata(L, INVALID_HANDLE_VALUE); lua_setfield(L, -2, "INVALID_HANDLE_VALUE"); lua_pushinteger(L, CALLSERVICE_NOTFOUND); lua_setfield(L, -2, "CALLSERVICE_NOTFOUND"); char version[128]; CallService(MS_SYSTEM_GETVERSIONTEXT, (WPARAM)_countof(version), (LPARAM)version); lua_pushstring(L, ptrA(mir_utf8encode(version))); lua_setfield(L, -2, "Version"); // set copy to global variable m lua_pushvalue(L, -1); lua_setglobal(L, "m"); return 1; }
static int lua_SettingIterator(lua_State *L) { int i = lua_tointeger(L, lua_upvalueindex(1)); enumDBSettingsParam* param = (enumDBSettingsParam*)lua_touserdata(L, lua_upvalueindex(2)); if (i < param->count) { lua_pushinteger(L, (i + 1)); lua_replace(L, lua_upvalueindex(1)); lua_pushstring(L, ptrA(mir_utf8encode(param->pszSettingName[i]))); mir_free(param->pszSettingName[i]); } else { lua_pushnil(L); mir_free(param->pszSettingName); mir_free(param); } return 1; }