Skip to content

Commit

Permalink
Support for new ban types in Java
Browse files Browse the repository at this point in the history
  • Loading branch information
bear101 committed Mar 1, 2018
1 parent b65b6ca commit e352eed
Show file tree
Hide file tree
Showing 10 changed files with 160 additions and 23 deletions.
30 changes: 30 additions & 0 deletions Library/TeamTalkJNI/jni/teamtalk-jni.cpp
Expand Up @@ -1074,6 +1074,25 @@ extern "C" {
return TT_DoBanUser(reinterpret_cast<TTInstance*>(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<TTInstance*>(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<TTInstance*>(lpTTInstance), &ban);
}

JNIEXPORT jint JNICALL Java_dk_bearware_TeamTalkBase_doBanIPAddress(JNIEnv* env,
jobject thiz,
jlong lpTTInstance,
Expand All @@ -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<TTInstance*>(lpTTInstance), &ban);
}

JNIEXPORT jint JNICALL Java_dk_bearware_TeamTalkBase_doListBans(JNIEnv* env,
jobject thiz,
jlong lpTTInstance,
Expand Down
30 changes: 23 additions & 7 deletions Library/TeamTalkJNI/jni/ttconvert-jni.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand All @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion Library/TeamTalkJNI/jni/ttconvert-jni.h
Expand Up @@ -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);
Expand Down
30 changes: 30 additions & 0 deletions 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;
}
1 change: 1 addition & 0 deletions Library/TeamTalkJNI/src/dk/bearware/BannedUser.java
Expand Up @@ -28,4 +28,5 @@ public class BannedUser
public String szBanTime;
public String szNickname;
public String szUsername;
public int uBanTypes = 0;
}
3 changes: 3 additions & 0 deletions Library/TeamTalkJNI/src/dk/bearware/ClientError.java
Expand Up @@ -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;
Expand All @@ -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;
Expand Down
12 changes: 12 additions & 0 deletions Library/TeamTalkJNI/src/dk/bearware/TeamTalkBase.java
Expand Up @@ -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);
Expand All @@ -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);
Expand Down
2 changes: 2 additions & 0 deletions Library/TeamTalkJNI/src/dk/bearware/UserRight.java
Expand Up @@ -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;

Expand Down
65 changes: 54 additions & 11 deletions Library/TeamTalkJNI/test/dk/bearware/TeamTalkTestCase.java
Expand Up @@ -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{
Expand Down
8 changes: 4 additions & 4 deletions 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

0 comments on commit e352eed

Please sign in to comment.