// LibChatPrivacy - C component of ChatPrivacy // Copyright (C) 2021 Soni L. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library 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 // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA #include #include #include /* libotr headers */ #include #include #include #include "libchatprivacy.h" /* The protocol ID */ static char const *const PROTOCOL = "minecraft"; static OtrlUserState userstate = NULL; static int initialized = 0; static char *userat = NULL; static OtrlMessageAppOps msgappops = {0}; #define LCP_CB_IMPL(name, nullable) \ static lcp_cb_##name *cb_##name = NULL; \ lcp_cb_##name *lcp_setup_cb_##name(lcp_cb_##name *const func) { \ nullable \ lcp_cb_##name *const oldfunc = cb_##name; \ cb_##name = func; \ return oldfunc; \ } #define LCP_CB_IMPL_OPT(name) LCP_CB_IMPL(name, ) #define LCP_CB_IMPL_REQ(name) LCP_CB_IMPL(name, assert(func != NULL);) LCP_CB_IMPL_REQ(printmsg) LCP_CB_IMPL_REQ(sendmsg) LCP_CB_IMPL_REQ(dialogmsg) LCP_CB_IMPL_OPT(diagmsg) int lcp_init(char const *const uuid) { if (!initialized) { initialized = 1; OTRL_INIT; } /* callback checks */ assert(cb_printmsg != NULL); assert(cb_sendmsg != NULL); assert(cb_dialogmsg != NULL); /* library state checks */ if (userstate != NULL || userat != NULL) { return 0; } /* arg checks */ if (uuid == NULL) { return 0; } userstate = otrl_userstate_create(); assert(userstate != NULL); /* read stuff */ otrl_privkey_read(userstate, "privkey"); otrl_instag_read(userstate, "instag"); otrl_privkey_read_fingerprints(userstate, "fingerprints", NULL, NULL); /* copy uuid/userat */ size_t const uuidlen = strlen(uuid); size_t const bufsize = uuidlen + 1; char *const userat_buf = calloc(bufsize, 1); if (userat_buf == NULL) { return 0; } memcpy(userat_buf, uuid, uuidlen); userat = userat_buf; if (cb_diagmsg != NULL) { cb_diagmsg(LCP_DIAG_INFO, "lcp initialized"); } return 1; } int lcp_deinit(void) { assert(userstate != NULL); assert(userat != NULL); otrl_userstate_free(userstate); userstate = NULL; free((void *)userat); userat = NULL; return 1; } void lcp_user_join(char const *const uuid, char const *const name) { assert(0); } void lcp_user_part(char const *const uuid, char const *const name) { assert(0); } void lcp_send(char const *const name, char const *const message) { assert(0); } void lcp_recv(char const *const uuid, char const *const message) { assert(0); } void lcp_cmd(char const *const cmd) { assert(0); } void lcp_tick(void) { assert(0); }