Пример #1
0
INT_PTR NetlibSend(WPARAM wParam, LPARAM lParam)
{
	NetlibConnection *nlc = (NetlibConnection*)wParam;
	NETLIBBUFFER *nlb = (NETLIBBUFFER*)lParam;
	if (nlb == NULL) {
		SetLastError(ERROR_INVALID_PARAMETER);
		return SOCKET_ERROR;
	}

	if (!NetlibEnterNestedCS(nlc, NLNCS_SEND))
		return SOCKET_ERROR;

	int result;
	if (nlc->usingHttpGateway && !(nlb->flags & MSG_RAW)) {
		if (!(nlb->flags & MSG_NOHTTPGATEWAYWRAP) && nlc->nlu->user.pfnHttpGatewayWrapSend) {
			NetlibDumpData(nlc, (PBYTE)nlb->buf, nlb->len, 1, nlb->flags);
			result = nlc->nlu->user.pfnHttpGatewayWrapSend((HANDLE)nlc, (PBYTE)nlb->buf, nlb->len, nlb->flags | MSG_NOHTTPGATEWAYWRAP, NetlibSend);
		}
		else result = NetlibHttpGatewayPost(nlc, nlb->buf, nlb->len, nlb->flags);
	}
	else {
		NetlibDumpData(nlc, (PBYTE)nlb->buf, nlb->len, 1, nlb->flags);
		if (nlc->hSsl)
			result = sslApi.write(nlc->hSsl, nlb->buf, nlb->len);
		else
			result = send(nlc->s, nlb->buf, nlb->len, nlb->flags & 0xFFFF);
	}
	NetlibLeaveNestedCS(&nlc->ncsSend);

	NETLIBNOTIFY nln = { nlb, result };
	NotifyFastHook(hSendEvent, (WPARAM)&nln, (LPARAM)&nlc->nlu->user);

	return result;
}
Пример #2
0
INT_PTR NetlibRecv(WPARAM wParam, LPARAM lParam)
{
	NetlibConnection *nlc = (NetlibConnection*)wParam;
	NETLIBBUFFER* nlb = (NETLIBBUFFER*)lParam;
	int recvResult;

	if (nlb == NULL) {
		SetLastError(ERROR_INVALID_PARAMETER);
		return SOCKET_ERROR;
	}

	if (!NetlibEnterNestedCS(nlc, NLNCS_RECV))
		return SOCKET_ERROR;

	if (nlc->usingHttpGateway && !(nlb->flags & MSG_RAW))
		recvResult = NetlibHttpGatewayRecv(nlc, nlb->buf, nlb->len, nlb->flags);
	else {
		if (nlc->hSsl)
			recvResult = sslApi.read(nlc->hSsl, nlb->buf, nlb->len, (nlb->flags & MSG_PEEK) != 0);
		else
			recvResult = recv(nlc->s, nlb->buf, nlb->len, nlb->flags & 0xFFFF);
	}
	NetlibLeaveNestedCS(&nlc->ncsRecv);
	if (recvResult <= 0)
		return recvResult;

	NetlibDumpData(nlc, (PBYTE)nlb->buf, recvResult, 0, nlb->flags);

	if ((nlb->flags & MSG_PEEK) == 0) {
		NETLIBNOTIFY nln = { nlb, recvResult };
		NotifyFastHook(hRecvEvent, (WPARAM)&nln, (LPARAM)&nlc->nlu->user);
	}
	return recvResult;
}
Пример #3
0
static bool LoadPluginDynamically(PluginListItemData *dat)
{
	TCHAR exe[MAX_PATH];
	GetModuleFileName(NULL, exe, _countof(exe));
	TCHAR *p = _tcsrchr(exe, '\\'); if (p) *p = 0;

	pluginEntry* pPlug = OpenPlugin(dat->fileName, _T("Plugins"), exe);
	if (pPlug->pclass & PCLASS_FAILED) {
	LBL_Error:
		Plugin_UnloadDyn(pPlug);
		return false;
	}

	if (!TryLoadPlugin(pPlug, true))
		goto LBL_Error;

	if (CallPluginEventHook(pPlug->bpi.hInst, hModulesLoadedEvent, 0, 0) != 0)
		goto LBL_Error;

	dat->hInst = pPlug->bpi.hInst;
	NotifyFastHook(hevLoadModule, (WPARAM)pPlug->bpi.pluginInfo, (LPARAM)pPlug->bpi.hInst);
	return true;
}
Пример #4
0
void CJabberProto::MenuInit()
{
    CMenuItem mi;
    mi.root = m_hMenuRoot = Menu_GetProtocolRoot(this);
    mi.flags = CMIF_UNMOVABLE;

    // "Bookmarks..."
    mi.pszService = "/Bookmarks";
    CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleBookmarks);
    mi.name.a = LPGEN("Bookmarks");
    mi.position = 200001;
    mi.hIcolibItem = GetIconHandle(IDI_BOOKMARKS);
    m_hMenuBookmarks = Menu_AddProtoMenuItem(&mi, m_szModuleName);

    // "Services..."
    mi.pszService = NULL;
    mi.name.a = LPGEN("Services...");
    mi.position = 200003;
    mi.hIcolibItem = GetIconHandle(IDI_SERVICE_DISCOVERY);
    HGENMENU hMenuServicesRoot = Menu_AddProtoMenuItem(&mi, m_szModuleName);

    // "Service Discovery..."
    mi.root = hMenuServicesRoot;
    mi.pszService = "/ServiceDiscovery";
    CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleServiceDiscovery);
    mi.name.a = LPGEN("Service Discovery");
    mi.position = 2000050001;
    mi.hIcolibItem = GetIconHandle(IDI_SERVICE_DISCOVERY);
    m_hMenuServiceDiscovery = Menu_AddProtoMenuItem(&mi, m_szModuleName);

    mi.pszService = "/SD/MyTransports";
    CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleServiceDiscoveryMyTransports);
    mi.name.a = LPGEN("Registered Transports");
    mi.position = 2000050003;
    mi.hIcolibItem = GetIconHandle(IDI_TRANSPORTL);
    m_hMenuSDMyTransports = Menu_AddProtoMenuItem(&mi, m_szModuleName);

    mi.pszService = "/SD/Transports";
    CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleServiceDiscoveryTransports);
    mi.name.a = LPGEN("Local Server Transports");
    mi.position = 2000050004;
    mi.hIcolibItem = GetIconHandle(IDI_TRANSPORT);
    m_hMenuSDTransports = Menu_AddProtoMenuItem(&mi, m_szModuleName);

    mi.pszService = "/SD/Conferences";
    CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleServiceDiscoveryConferences);
    mi.name.a = LPGEN("Browse chatrooms");
    mi.position = 2000050005;
    mi.hIcolibItem = GetIconHandle(IDI_GROUP);
    m_hMenuSDConferences = Menu_AddProtoMenuItem(&mi, m_szModuleName);

    mi.pszService = "/Groupchat";
    CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleJoinGroupchat);
    mi.name.a = LPGEN("Create/Join group chat");
    mi.position = 2000050006;
    mi.hIcolibItem = GetIconHandle(IDI_GROUP);
    m_hMenuGroupchat = Menu_AddProtoMenuItem(&mi, m_szModuleName);

    // "Change Password..."
    mi.pszService = "/ChangePassword";
    CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleChangePassword);
    mi.name.a = LPGEN("Change Password");
    mi.position = 2000050007;
    mi.hIcolibItem = GetIconHandle(IDI_KEYS);
    m_hMenuChangePassword = Menu_AddProtoMenuItem(&mi, m_szModuleName);

    // "Roster editor"
    mi.pszService = "/RosterEditor";
    CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleRosterControl);
    mi.name.a = LPGEN("Roster editor");
    mi.position = 2000050009;
    mi.hIcolibItem = GetIconHandle(IDI_AGENTS);
    m_hMenuRosterControl = Menu_AddProtoMenuItem(&mi, m_szModuleName);

    // "XML Console"
    mi.pszService = "/XMLConsole";
    CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleConsole);
    mi.name.a = LPGEN("XML Console");
    mi.position = 2000050010;
    mi.hIcolibItem = GetIconHandle(IDI_CONSOLE);
    Menu_AddProtoMenuItem(&mi, m_szModuleName);

    mi.pszService = "/Notes";
    CreateProtoService(mi.pszService, &CJabberProto::OnMenuHandleNotes);
    mi.name.a = LPGEN("Notes");
    mi.position = 2000050011;
    mi.hIcolibItem = GetIconHandle(IDI_NOTES);
    m_hMenuNotes = Menu_AddProtoMenuItem(&mi, m_szModuleName);

    BuildPrivacyMenu();
    if (m_menuItemsStatus)
        BuildPrivacyListsMenu(false);

    //////////////////////////////////////////////////////////////////////////////////////
    // build priority menu

    m_priorityMenuVal = 0;
    m_priorityMenuValSet = false;

    mi.pszService = NULL;
    mi.position = 200006;
    mi.root = m_hMenuRoot;
    mi.name.a = LPGEN("Resource priority");
    mi.flags = CMIF_UNMOVABLE | CMIF_HIDDEN;
    m_hMenuPriorityRoot = Menu_AddProtoMenuItem(&mi);

    TCHAR szName[128];
    char srvFce[MAX_PATH + 64];
    mi.pszService = srvFce;
    mi.name.t = szName;
    mi.position = 2000040000;
    mi.flags = CMIF_UNMOVABLE | CMIF_TCHAR | CMIF_KEEPUNTRANSLATED;
    mi.root = m_hMenuPriorityRoot;

    mir_snprintf(srvFce, "/menuSetPriority/%d", 0);
    bool needServices = !ProtoServiceExists(m_szModuleName, srvFce);
    if (needServices)
        CreateProtoServiceParam(srvFce, &CJabberProto::OnMenuSetPriority, 0);

    int steps[] = { 10, 5, 1, 0, -1, -5, -10 };
    for (int i = 0; i < _countof(steps); i++) {
        if (!steps[i]) {
            mi.position += 100000;
            continue;
        }

        mir_snprintf(srvFce, "/menuSetPriority/%d", steps[i]);
        if (steps[i] > 0) {
            mir_sntprintf(szName, TranslateT("Increase priority by %d"), steps[i]);
            mi.hIcolibItem = GetIconHandle(IDI_ARROW_UP);
        }
        else {
            mir_sntprintf(szName, TranslateT("Decrease priority by %d"), -steps[i]);
            mi.hIcolibItem = GetIconHandle(IDI_ARROW_DOWN);
        }

        if (needServices)
            CreateProtoServiceParam(srvFce, &CJabberProto::OnMenuSetPriority, (LPARAM)steps[i]);

        mi.position++;
        Menu_AddProtoMenuItem(&mi, m_szModuleName);
    }

    UpdatePriorityMenu((short)getWord("Priority", 0));

    //////////////////////////////////////////////////////////////////////////////////////
    // finalize status menu

    m_pepServices.RebuildMenu();
    CheckMenuItems();

    NotifyFastHook(hStatusMenuInit, (WPARAM)m_hMenuRoot, (LPARAM)(IJabberInterface*)this);
}