/* Traffic Counter plugin for Miranda IM Copyright 2007-2011 Mironych. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* ====================================================================================== ����� ���������� ������� ��� ��������� ������� Variables �����: Mironych =======================================================================================*/ #include "commonheaders.h" static TCHAR* GetTraffic(ARGUMENTSINFO *ai) { DWORD tmp, tmpsn = 0, tmprn = 0, tmpst = 0, tmprt = 0; BYTE ed; WORD l; TCHAR *res; if (ai->argc != 5) return NULL; if (!_tcscmp(ai->targv[1], _T("overall"))) { tmpsn = OverallInfo.CurrentSentTraffic; tmprn = OverallInfo.CurrentRecvTraffic; tmpst = OverallInfo.TotalSentTraffic; tmprt = OverallInfo.TotalRecvTraffic; } else if (!_tcscmp(ai->targv[1], _T("summary"))) { for (ed = 0; ed < NumberOfAccounts; ed++) if (ProtoList[ed].Visible) { tmpsn += ProtoList[ed].CurrentSentTraffic; tmprn += ProtoList[ed].CurrentRecvTraffic; tmpst += ProtoList[ed].TotalSentTraffic; tmprt += ProtoList[ed].TotalRecvTraffic; } } else { // ���� ������ ���������, ����������� ������ ���������� for (tmp = ed = 0; ed < NumberOfAccounts; ed++) { TCHAR *buf; if (!ProtoList[ed].name) continue; buf = mir_a2t(ProtoList[ed].name); if (!_tcscmp(buf, ai->targv[1])) { tmpsn = ProtoList[ed].CurrentSentTraffic; tmprn = ProtoList[ed].CurrentRecvTraffic; tmpst = ProtoList[ed].TotalSentTraffic; tmprt = ProtoList[ed].TotalRecvTraffic; tmp = 0xAA; // ������� ����, ��� �������� ��� ������ } mir_free(buf); } if (tmp != 0xAA) return NULL; } if (!_tcscmp(ai->targv[2], _T("now"))) { if (!_tcscmp(ai->targv[3], _T("sent"))) tmp = tmpsn; else if (!_tcscmp(ai->targv[3], _T("received"))) tmp = tmprn; else if (!_tcscmp(ai->targv[3], _T("both"))) tmp = tmprn + tmpsn; else return NULL; } else if (!_tcscmp(ai->targv[2], _T("total"))) { if (!_tcscmp(ai->targv[3], _T("sent"))) tmp = tmpst; else if (!_tcscmp(ai->targv[3], _T("received"))) tmp = tmprt; else if (!_tcscmp(ai->targv[3], _T("both"))) tmp = tmprt + tmpst; else return NULL; } else return NULL; if (!_tcscmp(ai->targv[4], _T("b"))) ed = 0; else if (!_tcscmp(ai->targv[4], _T("k"))) ed = 1; else if (!_tcscmp(ai->targv[4], _T("m"))) ed = 2; else if (!_tcscmp(ai->targv[4], _T("d"))) ed = 3; else return NULL; // �������� ��������������� ������ � ���������� ��������� �� ��. // ������� ������ ������ ������. l = GetFormattedTraffic(tmp, ed, NULL, 0); res = (TCHAR*)mir_alloc(l * sizeof(TCHAR)); if (!res) return NULL; if (GetFormattedTraffic(tmp, ed, res, l)) return res; return NULL; } static TCHAR* GetTime(ARGUMENTSINFO *ai) { BYTE ed, flag; TCHAR *res = NULL; WORD l; DWORD Duration; if (ai->argc != 4) return NULL; // ���� ������ ���������, ����������� ������ ���������� for (flag = ed = 0; ed < NumberOfAccounts; ed++) { TCHAR *buf; if (!ProtoList[ed].name) continue; buf = mir_a2t(ProtoList[ed].name); if (!_tcscmp(buf, ai->targv[1])) { flag = 0xAA; if (!_tcscmp(ai->targv[2], _T("now"))) Duration = ProtoList[ed].Session.Timer; else if (!_tcscmp(ai->targv[2], _T("total"))) Duration = ProtoList[ed].Total.Timer; else flag = 0; break; } mir_free(buf); } if ( (flag != 0xAA) && !_tcscmp(ai->targv[1], _T("summary")) ) { flag = 0xAA; if (!_tcscmp(ai->targv[2], _T("now"))) Duration = OverallInfo.Session.Timer; else if (!_tcscmp(ai->targv[2], _T("total"))) Duration = OverallInfo.Total.Timer; else flag = 0; } if (flag != 0xAA) return NULL; // �������� ��������������� ������ � ���������� ��������� �� ��. // ������� ������ ������ ������. l = GetDurationFormatM(Duration, ai->targv[3], NULL, 0); res = (TCHAR*)mir_alloc(l * sizeof(TCHAR)); if (!res) return NULL; GetDurationFormatM(Duration, ai->targv[3], res, l); return res; } void RegisterVariablesTokens(void) { TOKENREGISTER trs; if (!bVariablesExists) return; ZeroMemory(&trs, sizeof(trs)); trs.cbSize = sizeof(TOKENREGISTER); // �������, ������������ ������ trs.tszTokenString = _T("tc_GetTraffic"); trs.parseFunctionT = GetTraffic; trs.szHelpText = "Traffic counter\t(A,B,C,D)\tGet traffic counter value. A: <ProtocolName> OR overall OR summary; B: now OR total; C: sent OR received OR both; D: b - in bytes, k - in kilobytes, m - in megabytes, d - dynamic"; trs.flags = TRF_TCHAR | TRF_PARSEFUNC | TRF_FUNCTION | TRF_FREEMEM; trs.memType = TR_MEM_MIRANDA; CallService(MS_VARS_REGISTERTOKEN, 0, (LPARAM)&trs); // �������, ������������ ����� trs.tszTokenString = _T("tc_GetTime"); trs.parseFunctionT = GetTime; trs.szHelpText = "Traffic counter\t(A,B,C)\tGet time counter value. A: <ProtocolName> OR summary; B: now OR total; C: format"; CallService(MS_VARS_REGISTERTOKEN, 0, (LPARAM)&trs); }