diff --git a/Library/TeamTalkJNI/jni/teamtalk-jni.cpp b/Library/TeamTalkJNI/jni/teamtalk-jni.cpp index 5c68ab845a..93acb4e32b 100644 --- a/Library/TeamTalkJNI/jni/teamtalk-jni.cpp +++ b/Library/TeamTalkJNI/jni/teamtalk-jni.cpp @@ -1074,6 +1074,25 @@ extern "C" { return TT_DoBanUser(reinterpret_cast(lpTTInstance), nUserID, nChannelID); } + JNIEXPORT jint JNICALL Java_dk_bearware_TeamTalkBase_doBanUserEx(JNIEnv* env, + jobject thiz, + jlong lpTTInstance, + jint nUserID, + jint uBanTypes) + { + return TT_DoBanUserEx(reinterpret_cast(lpTTInstance), nUserID, uBanTypes); + } + + JNIEXPORT jint JNICALL Java_dk_bearware_TeamTalkBase_doBan(JNIEnv* env, + jobject thiz, + jlong lpTTInstance, + jobject lpBannedUser) + { + BannedUser ban; + setBannedUser(env, ban, lpBannedUser, J2N); + return TT_DoBan(reinterpret_cast(lpTTInstance), &ban); + } + JNIEXPORT jint JNICALL Java_dk_bearware_TeamTalkBase_doBanIPAddress(JNIEnv* env, jobject thiz, jlong lpTTInstance, @@ -1098,6 +1117,17 @@ extern "C" { ttstr(env, szIPAddress), nChannelID); } + JNIEXPORT jint JNICALL Java_dk_bearware_TeamTalkBase_doUnBanUserEx(JNIEnv* env, + jobject thiz, + jlong lpTTInstance, + jobject lpBannedUser) + { + THROW_NULLEX(env, lpBannedUser, -1); + BannedUser ban; + setBannedUser(env, ban, lpBannedUser, J2N); + return TT_DoUnBanUserEx(reinterpret_cast(lpTTInstance), &ban); + } + JNIEXPORT jint JNICALL Java_dk_bearware_TeamTalkBase_doListBans(JNIEnv* env, jobject thiz, jlong lpTTInstance, diff --git a/Library/TeamTalkJNI/jni/ttconvert-jni.cpp b/Library/TeamTalkJNI/jni/ttconvert-jni.cpp index 0bb730d72e..721e1d0640 100644 --- a/Library/TeamTalkJNI/jni/ttconvert-jni.cpp +++ b/Library/TeamTalkJNI/jni/ttconvert-jni.cpp @@ -535,7 +535,7 @@ void setTTMessage(JNIEnv* env, TTMessage& msg, jobject pMsg) { jclass cls_obj = env->FindClass("dk/bearware/BannedUser"); jobject newObj = newObject(env, cls_obj); - setBannedUser(env, msg.banneduser, newObj); + setBannedUser(env, msg.banneduser, newObj, N2J); env->SetObjectField(pMsg, fid_ban, newObj); } break; @@ -1250,7 +1250,7 @@ void setFileTransfer(JNIEnv* env, const FileTransfer& filetx, jobject lpFileTran env->SetBooleanField(lpFileTransfer, fid_inbound, filetx.bInbound); } -void setBannedUser(JNIEnv* env, const BannedUser& banned, jobject lpBannedUser) +void setBannedUser(JNIEnv* env, BannedUser& banned, jobject lpBannedUser, JConvert conv) { jclass cls_ban = env->GetObjectClass(lpBannedUser); @@ -1259,18 +1259,34 @@ void setBannedUser(JNIEnv* env, const BannedUser& banned, jobject lpBannedUser) jfieldID fid_time = env->GetFieldID(cls_ban, "szBanTime", "Ljava/lang/String;"); jfieldID fid_nick = env->GetFieldID(cls_ban, "szNickname", "Ljava/lang/String;"); jfieldID fid_username = env->GetFieldID(cls_ban, "szUsername", "Ljava/lang/String;"); + jfieldID fid_bantype = env->GetFieldID(cls_ban, "uBanTypes", "I"); assert(fid_ipaddr); assert(fid_chan); assert(fid_time); assert(fid_nick); assert(fid_username); + assert(fid_bantype); - env->SetObjectField(lpBannedUser, fid_ipaddr, NEW_JSTRING(env, banned.szIPAddress)); - env->SetObjectField(lpBannedUser, fid_chan, NEW_JSTRING(env, banned.szChannelPath)); - env->SetObjectField(lpBannedUser, fid_time, NEW_JSTRING(env, banned.szBanTime)); - env->SetObjectField(lpBannedUser, fid_nick, NEW_JSTRING(env, banned.szNickname)); - env->SetObjectField(lpBannedUser, fid_username, NEW_JSTRING(env, banned.szUsername)); + if (conv == N2J) + { + env->SetObjectField(lpBannedUser, fid_ipaddr, NEW_JSTRING(env, banned.szIPAddress)); + env->SetObjectField(lpBannedUser, fid_chan, NEW_JSTRING(env, banned.szChannelPath)); + env->SetObjectField(lpBannedUser, fid_time, NEW_JSTRING(env, banned.szBanTime)); + env->SetObjectField(lpBannedUser, fid_nick, NEW_JSTRING(env, banned.szNickname)); + env->SetObjectField(lpBannedUser, fid_username, NEW_JSTRING(env, banned.szUsername)); + env->SetIntField(lpBannedUser, fid_bantype, banned.uBanTypes); + } + else + { + ZERO_STRUCT(banned); + TT_STRCPY(banned.szIPAddress, ttstr(env, (jstring)env->GetObjectField(lpBannedUser, fid_ipaddr))); + TT_STRCPY(banned.szChannelPath, ttstr(env, (jstring)env->GetObjectField(lpBannedUser, fid_chan))); + TT_STRCPY(banned.szBanTime, ttstr(env, (jstring)env->GetObjectField(lpBannedUser, fid_time))); + TT_STRCPY(banned.szNickname, ttstr(env, (jstring)env->GetObjectField(lpBannedUser, fid_nick))); + TT_STRCPY(banned.szUsername, ttstr(env, (jstring)env->GetObjectField(lpBannedUser, fid_username))); + banned.uBanTypes = env->GetIntField(lpBannedUser, fid_bantype); + } } void setClientErrorMsg(JNIEnv* env, ClientErrorMsg& cemsg, jobject lpClientErrorMsg, JConvert conv) diff --git a/Library/TeamTalkJNI/jni/ttconvert-jni.h b/Library/TeamTalkJNI/jni/ttconvert-jni.h index 90da3490c4..732ee9aec2 100644 --- a/Library/TeamTalkJNI/jni/ttconvert-jni.h +++ b/Library/TeamTalkJNI/jni/ttconvert-jni.h @@ -122,7 +122,7 @@ void setServerStatistics(JNIEnv* env, ServerStatistics& stats, jobject lpServerS void setRemoteFile(JNIEnv* env, RemoteFile& fileinfo, jobject lpRemoteFile, JConvert conv); void setUserStatistics(JNIEnv* env, const UserStatistics& stats, jobject lpUserStatistics); void setFileTransfer(JNIEnv* env, const FileTransfer& filetx, jobject lpFileTransfer); -void setBannedUser(JNIEnv* env, const BannedUser& banned, jobject lpBannedUser); +void setBannedUser(JNIEnv* env, BannedUser& banned, jobject lpBannedUser, JConvert conv); void setClientErrorMsg(JNIEnv* env, ClientErrorMsg& cemsg, jobject lpClientErrorMsg, JConvert conv); void setDesktopInput(JNIEnv* env, DesktopInput& input, jobject lpDesktopInput, JConvert conv); void setDesktopWindow(JNIEnv* env, DesktopWindow& deskwnd, jobject lpDesktopWindow, JConvert conv); diff --git a/Library/TeamTalkJNI/src/dk/bearware/BanType.java b/Library/TeamTalkJNI/src/dk/bearware/BanType.java new file mode 100644 index 0000000000..ccae25a349 --- /dev/null +++ b/Library/TeamTalkJNI/src/dk/bearware/BanType.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2005-2017, BearWare.dk + * + * Contact Information: + * + * Bjoern D. Rasmussen + * Kirketoften 5 + * DK-8260 Viby J + * Denmark + * Email: contact@bearware.dk + * Phone: +45 20 20 54 59 + * Web: http://www.bearware.dk + * + * This source code is part of the TeamTalk 5 SDK owned by + * BearWare.dk. All copyright statements may not be removed + * or altered from any source distribution. If you use this + * software in a product, an acknowledgment in the product + * documentation is required. + * + */ + +package dk.bearware; + +public interface BanType +{ + public static final int BANTYPE_NONE = 0x00; + public static final int BANTYPE_CHANNEL = 0x01; + public static final int BANTYPE_IPADDR = 0x02; + public static final int BANTYPE_USERNAME = 0x04; +} diff --git a/Library/TeamTalkJNI/src/dk/bearware/BannedUser.java b/Library/TeamTalkJNI/src/dk/bearware/BannedUser.java index 0e8b14bc68..7852844194 100644 --- a/Library/TeamTalkJNI/src/dk/bearware/BannedUser.java +++ b/Library/TeamTalkJNI/src/dk/bearware/BannedUser.java @@ -28,4 +28,5 @@ public class BannedUser public String szBanTime; public String szNickname; public String szUsername; + public int uBanTypes = 0; } diff --git a/Library/TeamTalkJNI/src/dk/bearware/ClientError.java b/Library/TeamTalkJNI/src/dk/bearware/ClientError.java index 1fc8bd3463..923a645046 100644 --- a/Library/TeamTalkJNI/src/dk/bearware/ClientError.java +++ b/Library/TeamTalkJNI/src/dk/bearware/ClientError.java @@ -45,6 +45,8 @@ public class ClientError { public static final int CMDERR_AUDIOCODEC_BITRATE_LIMIT_EXCEEDED = 2011; public static final int CMDERR_MAX_LOGINS_PER_IPADDRESS_EXCEEDED = 2012; public static final int CMDERR_MAX_CHANNELS_EXCEEDED = 2013; + public static final int CMDERR_COMMAND_FLOOD = 2014; + public static final int CMDERR_CHANNEL_BANNED = 2015; public static final int CMDERR_NOT_LOGGEDIN = 3000; public static final int CMDERR_ALREADY_LOGGEDIN = 3001; @@ -61,6 +63,7 @@ public class ClientError { public static final int CMDERR_FILE_ALREADY_EXISTS = 3012; public static final int CMDERR_FILESHARING_DISABLED = 3013; public static final int CMDERR_CHANNEL_HAS_USERS = 3015; + public static final int CMDERR_LOGINSERVICE_UNAVAILABLE = 3016; public static final int INTERR_SNDINPUT_FAILURE = 10000; public static final int INTERR_SNDOUTPUT_FAILURE = 10001; diff --git a/Library/TeamTalkJNI/src/dk/bearware/TeamTalkBase.java b/Library/TeamTalkJNI/src/dk/bearware/TeamTalkBase.java index 9c1a3a8943..407bd1be4d 100644 --- a/Library/TeamTalkJNI/src/dk/bearware/TeamTalkBase.java +++ b/Library/TeamTalkJNI/src/dk/bearware/TeamTalkBase.java @@ -547,6 +547,14 @@ public int doDeleteUserAccount(String szUsername) { public int doBanUser(int nUserID, int nChannelID) { return doBanUser(ttInst, nUserID, nChannelID); } + private native int doBanUserEx(long lpTTInstance, int nUserID, int uBanTypes); + public int doBanUserEx(int nUserID, int uBanTypes) { + return doBanUserEx(ttInst, nUserID, uBanTypes); + } + private native int doBan(long lpTTInstance, BannedUser lpBannedUser); + public int doBan(BannedUser lpBannedUser) { + return doBan(ttInst, lpBannedUser); + } private native int doBanIPAddress(long lpTTInstance, String szIPAddress, int nChannelID); public int doBanIPAddress(String szIPAddress, int nChannelID) { return doBanIPAddress(ttInst, szIPAddress, nChannelID); @@ -555,6 +563,10 @@ public int doBanIPAddress(String szIPAddress, int nChannelID) { public int doUnBanUser(String szIPAddress, int nChannelID) { return doUnBanUser(ttInst, szIPAddress, nChannelID); } + private native int doUnBanUserEx(long lpTTInstance, BannedUser lpBannedUser); + public int doUnBanUserEx(BannedUser lpBannedUser) { + return doUnBanUserEx(ttInst, lpBannedUser); + } private native int doListBans(long lpTTInstance, int nChannelID, int nIndex, int nCount); public int doListBans(int nChannelID, int nIndex, int nCount) { return doListBans(ttInst, nChannelID, nIndex, nCount); diff --git a/Library/TeamTalkJNI/src/dk/bearware/UserRight.java b/Library/TeamTalkJNI/src/dk/bearware/UserRight.java index 3a9c67a72a..4455c61384 100644 --- a/Library/TeamTalkJNI/src/dk/bearware/UserRight.java +++ b/Library/TeamTalkJNI/src/dk/bearware/UserRight.java @@ -42,6 +42,8 @@ public interface UserRight public static final int USERRIGHT_TRANSMIT_DESKTOPINPUT = 0x00008000; public static final int USERRIGHT_TRANSMIT_MEDIAFILE_AUDIO = 0x00010000; public static final int USERRIGHT_TRANSMIT_MEDIAFILE_VIDEO = 0x00020000; + public static final int USERRIGHT_LOCKED_NICKNAME = 0x00040000; + public static final int USERRIGHT_LOCKED_STATUS = 0x00080000; public static final int USERRIGHT_ALL = 0xFFFFFFFF; diff --git a/Library/TeamTalkJNI/test/dk/bearware/TeamTalkTestCase.java b/Library/TeamTalkJNI/test/dk/bearware/TeamTalkTestCase.java index 4f8adc9adc..5f970c9c42 100644 --- a/Library/TeamTalkJNI/test/dk/bearware/TeamTalkTestCase.java +++ b/Library/TeamTalkJNI/test/dk/bearware/TeamTalkTestCase.java @@ -994,25 +994,68 @@ public void test_ListAccounts() { } public void test_ListBannedUsers() { - TeamTalkBase ttclient = newClientInstance(); - connect(ttclient); - login(ttclient, "test_09_ListBannedUsers", ADMIN_USERNAME, ADMIN_PASSWORD); - + + TeamTalkBase ttadmin = newClientInstance(); + connect(ttadmin); + login(ttadmin, "test_09_ListBannedUsers", ADMIN_USERNAME, ADMIN_PASSWORD); + User user = new User(); - assertTrue(ttclient.getUser(ttclient.getMyUserID(), user)); + assertTrue("get self", ttadmin.getUser(ttadmin.getMyUserID(), user)); String IPADDR = "10.2.3.4"; - assertTrue(waitCmdSuccess(ttclient, ttclient.doBanUser(ttclient.getMyUserID(), 0), DEF_WAIT)); - assertTrue(waitCmdSuccess(ttclient, ttclient.doBanIPAddress(IPADDR, 0), DEF_WAIT)); + assertTrue("wait ban", waitCmdSuccess(ttadmin, ttadmin.doBanUser(ttadmin.getMyUserID(), 0), DEF_WAIT)); + assertTrue("wait ip ban", waitCmdSuccess(ttadmin, ttadmin.doBanIPAddress(IPADDR, 0), DEF_WAIT)); TTMessage msg = new TTMessage(); - assertTrue(ttclient.doListBans(0, 0, 100)>0); - assertTrue(waitForEvent(ttclient, ClientEvent.CLIENTEVENT_CMD_BANNEDUSER, DEF_WAIT, msg)); + assertTrue("list bans", ttadmin.doListBans(0, 0, 100)>0); + assertTrue("wait ban list", waitForEvent(ttadmin, ClientEvent.CLIENTEVENT_CMD_BANNEDUSER, DEF_WAIT, msg)); BannedUser ban = msg.banneduser; assertTrue(ban.szIPAddress.length()>0); - assertTrue(waitCmdSuccess(ttclient, ttclient.doUnBanUser(user.szIPAddress, 0), DEF_WAIT)); - assertTrue(waitCmdSuccess(ttclient, ttclient.doUnBanUser(IPADDR, 0), DEF_WAIT)); + assertTrue("unban user IP", waitCmdSuccess(ttadmin, ttadmin.doUnBanUser(user.szIPAddress, 0), DEF_WAIT)); + assertTrue("unban specified IP", waitCmdSuccess(ttadmin, ttadmin.doUnBanUser(IPADDR, 0), DEF_WAIT)); + + String USERNAME = "tt_test", PASSWORD = "tt_test", NICKNAME = "jUnit - " + getCurrentMethod(); + int USERRIGHTS = UserRight.USERRIGHT_CREATE_TEMPORARY_CHANNEL | UserRight.USERRIGHT_VIEW_ALL_USERS | + UserRight.USERRIGHT_TRANSMIT_VOICE | UserRight.USERRIGHT_MULTI_LOGIN; + makeUserAccount(NICKNAME, USERNAME, PASSWORD, USERRIGHTS); + + TeamTalkBase ttclient = newClientInstance(); + connect(ttclient); + login(ttclient, NICKNAME, USERNAME, PASSWORD); + Channel chan = buildDefaultChannel(ttadmin, "BanTest"); + assertTrue("join new channel", waitCmdSuccess(ttclient, ttclient.doJoinChannel(chan), DEF_WAIT)); + + assertTrue("admin join", waitCmdSuccess(ttadmin, ttadmin.doJoinChannelByID(ttclient.getMyChannelID(), ""), DEF_WAIT)); + + assertTrue("ban admin", waitCmdSuccess(ttclient, ttclient.doBanUserEx(ttadmin.getMyUserID(), BanType.BANTYPE_CHANNEL | BanType.BANTYPE_USERNAME), DEF_WAIT)); + + assertTrue("list bans", ttclient.doListBans(ttclient.getMyChannelID(), 0, 100)>0); + assertTrue("wait ban list", waitForEvent(ttclient, ClientEvent.CLIENTEVENT_CMD_BANNEDUSER, DEF_WAIT, msg)); + ban = msg.banneduser; + assertTrue(ban.szIPAddress.length()>0); + assertEquals("Ban type same", BanType.BANTYPE_CHANNEL | BanType.BANTYPE_USERNAME, ban.uBanTypes); + + joinRoot(ttadmin); + + TeamTalkBase ttclient2 = newClientInstance(); + connect(ttclient2); + login(ttclient2, NICKNAME, USERNAME, PASSWORD); + + assertTrue("ttclient2 join", waitCmdSuccess(ttclient2, ttclient2.doJoinChannelByID(ttclient.getMyChannelID(), ""), DEF_WAIT)); + + assertTrue("admin leave", waitCmdSuccess(ttadmin, ttadmin.doLeaveChannel(), DEF_WAIT)); + assertTrue("admin join denied", waitCmdError(ttadmin, ttadmin.doJoinChannelByID(ttclient.getMyChannelID(), ""), DEF_WAIT)); + + assertTrue("unban", waitCmdSuccess(ttclient, ttclient.doUnBanUserEx(ban), DEF_WAIT)); + + assertTrue("admin join", waitCmdSuccess(ttadmin, ttadmin.doJoinChannelByID(ttclient.getMyChannelID(), ""), DEF_WAIT)); + + assertTrue("ban admin", waitCmdSuccess(ttclient, ttclient.doBan(ban), DEF_WAIT)); + + assertTrue("admin leave", waitCmdSuccess(ttadmin, ttadmin.doLeaveChannel(), DEF_WAIT)); + assertTrue("admin join denied", waitCmdError(ttadmin, ttadmin.doJoinChannelByID(ttclient.getMyChannelID(), ""), DEF_WAIT)); + } public void test_ChannelSwitch() throws InterruptedException{ diff --git a/env.sh b/env.sh index 697ecc3646..a512c247d7 100755 --- a/env.sh +++ b/env.sh @@ -1,11 +1,11 @@ #!/bin/bash if [ "Darwin" = `uname -s` ]; then - export DYLD_LIBRARY_PATH=$PWD/TeamTalk_DLL:$PWD/TeamTalkJNI/libs + export DYLD_LIBRARY_PATH=$PWD/Library/TeamTalk_DLL:$PWD/Library/TeamTalkJNI/libs else - export LD_LIBRARY_PATH=$PWD/TeamTalk_DLL:$PWD/TeamTalkJNI/libs + export LD_LIBRARY_PATH=$PWD/Library/TeamTalk_DLL:$PWD/Library/TeamTalkJNI/libs fi #locations of 'hamcrest-core' and 'junit' -export HAMCRESTCORE_JAR=$PWD/TeamTalkJNI/hamcrest-core-1.3.jar -export JUNIT_JAR=$PWD/TeamTalkJNI/junit-4.11.jar +export HAMCRESTCORE_JAR=$PWD/Library/TeamTalkJNI/hamcrest-core-1.3.jar +export JUNIT_JAR=$PWD/Library/TeamTalkJNI/junit-4.11.jar