diff --git a/README.md b/README.md index fea0f617..069cda1b 100644 --- a/README.md +++ b/README.md @@ -13,27 +13,46 @@ XmppDemo uses a Flux approach (check its `XmppStore`) to communicate with a samp ## Example ```js -var XMPP = require('react-native-xmpp'); +var XMPP = require("react-native-xmpp"); // optional callbacks -XMPP.on('message', (message) => console.log('MESSAGE:' + JSON.stringify(message))); -XMPP.on('iq', (message) => console.log('IQ:' + JSON.stringify(message))); -XMPP.on('presence', (message) => console.log('PRESENCE:' + JSON.stringify(message))); -XMPP.on('error', (message) => console.log('ERROR:' + message)); -XMPP.on('loginError', (message) => console.log('LOGIN ERROR:' + message)); -XMPP.on('login', (message) => console.log('LOGGED!')); -XMPP.on('connect', (message) => console.log('CONNECTED!')); -XMPP.on('disconnect', (message) => console.log('DISCONNECTED!')); +XMPP.on("message", message => + console.log("MESSAGE:" + JSON.stringify(message)) +); +XMPP.on("iq", message => console.log("IQ:" + JSON.stringify(message))); +XMPP.on("presence", message => + console.log("PRESENCE:" + JSON.stringify(message)) +); +XMPP.on("error", message => console.log("ERROR:" + message)); +XMPP.on("loginError", message => console.log("LOGIN ERROR:" + message)); +XMPP.on("login", message => console.log("LOGGED!")); +XMPP.on("connect", message => console.log("CONNECTED!")); +XMPP.on("disconnect", message => console.log("DISCONNECTED!")); // trustHosts (ignore self-signed SSL issues) // Warning: Do not use this in production (security will be compromised). -XMPP.trustHosts(['chat.google.com']); +XMPP.trustHosts(["chat.google.com"]); // connect -XMPP.connect(MYJID, MYPASSWORD); +XMPP.connect( + MYJID, + MYPASSWORD +); // send message -XMPP.message('Hello world!', TOJID); +XMPP.message("Hello world!", TOJID); + +// join room(s) +XMPP.joinRoom(ROOMJID_1, ROOMNICKNAME); +XMPP.joinRoom(ROOMJID_2, ROOMNICKNAME); + +// send message to room(s) +XMPP.sendRoomMessage(ROOMJID_1, "Hello room 1!"); +XMPP.sendRoomMessage(ROOMJID_2, "Hello room 2!"); + +// leave room(s) +XMPP.leaveRoom(ROOMJID_1); +XMPP.leaveRoom(ROOMJID_2); // disconnect XMPP.disconnect(); @@ -51,21 +70,21 @@ XMPP.removeListener(TYPE); ### iOS -Please use CocoaPods +Please use CocoaPods 2. Install latest XMPPFramework: -https://github.com/robbiehanson/XMPPFramework -`pod 'XMPPFramework', :git => 'https://github.com/robbiehanson/XMPPFramework.git', :branch => 'master'` + https://github.com/robbiehanson/XMPPFramework + `pod 'XMPPFramework', :git => 'https://github.com/robbiehanson/XMPPFramework.git', :branch => 'master'` 3. Add this package pod: -`pod 'RNXMPP', :path => '../node_modules/react-native-xmpp'` + `pod 'RNXMPP', :path => '../node_modules/react-native-xmpp'` If you have problems with latest 4.0 XMPPFramework and/or XCode 9.3, you may use old one with forked KissXML: `pod 'XMPPFramework', '~> 3.7.0'` `pod 'KissXML', :git => "https://github.com/aksonov/KissXML.git", :branch => '5.1.4'` - ### Android + `react-native link react-native-xmpp` If it doesn't link the react-native-xmpp correct: @@ -91,7 +110,7 @@ dependencies { On top, where imports are: ```java -import rnxmpp.RNXMPPPackage; +import com.rnxmpp.RNXMPPPackage; ``` Add the `ReactVideoPackage` class to your list of exported packages. diff --git a/RNXMPP/RNXMPP.m b/RNXMPP/RNXMPP.m index 5d439a67..e8db9dcf 100644 --- a/RNXMPP/RNXMPP.m +++ b/RNXMPP/RNXMPP.m @@ -155,6 +155,25 @@ -(void)onLogin:(NSString *)username password:(NSString *)password { [[RNXMPPService sharedInstance] sendStanza:stanza]; } +RCT_EXPORT_METHOD(joinRoom:(NSString *)roomJID nickName:(NSString *)nickname) +{ + [RNXMPPService sharedInstance].delegate = self; + [[RNXMPPService sharedInstance] joinRoom:roomJID nickName:nickname]; +} + +RCT_EXPORT_METHOD(leaveRoom:(NSString *)roomJID) +{ + [RNXMPPService sharedInstance].delegate = self; + [[RNXMPPService sharedInstance] leaveRoom:roomJID]; +} + +RCT_EXPORT_METHOD(sendRoomMessage:(NSString *)roomJID message:(NSString *)message) +{ + [RNXMPPService sharedInstance].delegate = self; + [[RNXMPPService sharedInstance] sendRoomMessage:roomJID message:message]; +} + + - (NSDictionary *)constantsToExport { return @{ PLAIN_AUTH : @(Plain), @@ -163,5 +182,10 @@ - (NSDictionary *)constantsToExport }; }; ++ (BOOL)requiresMainQueueSetup +{ + return NO; +} + @end diff --git a/RNXMPP/RNXMPPService.h b/RNXMPP/RNXMPPService.h index 055a6d49..c66fc042 100644 --- a/RNXMPP/RNXMPPService.h +++ b/RNXMPP/RNXMPPService.h @@ -37,6 +37,7 @@ @interface RNXMPPService : NSObject { XMPPStream *xmppStream; + XMPPRoom *xmppRoom; XMPPRoster *xmppRoster; XMPPRosterMemoryStorage *xmppRosterStorage; XMPPReconnect *xmppReconnect; @@ -54,6 +55,8 @@ @property (nonatomic, strong, readonly) XMPPStream *xmppStream; @property (nonatomic, strong, readonly) XMPPReconnect *xmppReconnect; @property (nonatomic, weak) id delegate; +@property (nonatomic) XMPPRoom *xmppRoom; +@property (nonatomic) NSMutableDictionary *xmppRooms; +(RNXMPPService *) sharedInstance; - (void)trustHosts:(NSArray *)hosts; @@ -63,8 +66,11 @@ - (void)sendMessage:(NSString *)text to:(NSString *)username thread:(NSString *)thread; - (void)sendPresence:(NSString *)to type:(NSString *)type; - (void)removeRoster:(NSString *)to; --(void)fetchRoster; --(void)sendStanza:(NSString *)stanza; +- (void)fetchRoster; +- (void)sendStanza:(NSString *)stanza; +- (void)joinRoom:(NSString *)roomJID nickName:(NSString *)nickname; +- (void)sendRoomMessage:(NSString *)roomJID message:(NSString *)message; +- (void)leaveRoom:(NSString *)roomJID; @end diff --git a/RNXMPP/RNXMPPService.m b/RNXMPP/RNXMPPService.m index 75455732..38f8ab5f 100644 --- a/RNXMPP/RNXMPPService.m +++ b/RNXMPP/RNXMPPService.m @@ -5,6 +5,8 @@ #import "XMPPLogging.h" #import "XMPPReconnect.h" #import "XMPPUser.h" +#import "XMPPRoom.h" +#import "XMPPRoomMemoryStorage.h" #import #import "DDTTYLogger.h" #import @@ -36,6 +38,8 @@ @implementation RNXMPPService @synthesize xmppStream; @synthesize xmppReconnect; +@synthesize xmppRoom; +@synthesize xmppRooms; +(RNXMPPService *) sharedInstance { static RNXMPPService *sharedInstance = nil; @@ -190,6 +194,9 @@ - (void)setupStream // You may need to alter these settings depending on the server you're connecting to customCertEvaluation = YES; + + // init xmppRooms dict + xmppRooms = [NSMutableDictionary dictionary]; } - (void)teardownStream @@ -263,6 +270,8 @@ - (BOOL)connect:(NSString *)myJID withPassword:(NSString *)myPassword auth:(Auth if (myJID == nil || myPassword == nil) { return NO; } + + NSLog(@"Connect using JID %@", myJID); [xmppStream setMyJID:[XMPPJID jidWithString:myJID]]; username = myJID; @@ -591,4 +600,31 @@ -(void)fetchRoster { [xmppRoster fetchRoster]; } +-(void)joinRoom:(NSString *)roomJID nickName:(NSString *)nickname{ + XMPPJID *ROOM_JID = [XMPPJID jidWithString:roomJID]; + XMPPRoomMemoryStorage *roomMemoryStorage = [[XMPPRoomMemoryStorage alloc] init]; + xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:roomMemoryStorage jid:ROOM_JID dispatchQueue:dispatch_get_main_queue()]; + [xmppRooms setObject:xmppRoom forKey:roomJID]; + NSXMLElement *history = [NSXMLElement elementWithName:@"history"]; + [history addAttributeWithName:@"maxstanzas" stringValue:@"0"]; + [xmppRoom activate:xmppStream]; + [xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()]; + [xmppRoom joinRoomUsingNickname:nickname history:history password:nil]; + } + +- (void)sendRoomMessage:(NSString *)roomJID message:(NSString *)message{ + if (!isXmppConnected){ + [self.delegate onError:[NSError errorWithDomain:@"xmpp" code:0 userInfo:@{NSLocalizedDescriptionKey: @"Server is not connected, please reconnect"}]]; + return; + } + [[xmppRooms objectForKey:roomJID] sendMessageWithBody:message]; + } + +-(void)leaveRoom:(NSString *)roomJID{ + [[xmppRooms objectForKey:roomJID] leaveRoom]; + [[xmppRooms objectForKey:roomJID] deactivate]; + [[xmppRooms objectForKey:roomJID] removeDelegate:self]; + [xmppRooms removeObjectForKey:roomJID]; +} + @end diff --git a/XmppDemo/android/app/src/main/java/com/xmppdemo/MainActivity.java b/XmppDemo/android/app/src/main/java/com/xmppdemo/MainActivity.java index bf91f9ac..5c8da7f3 100644 --- a/XmppDemo/android/app/src/main/java/com/xmppdemo/MainActivity.java +++ b/XmppDemo/android/app/src/main/java/com/xmppdemo/MainActivity.java @@ -1,7 +1,7 @@ package com.xmppdemo; import com.facebook.react.ReactActivity; -import rnxmpp.RNXMPPPackage; +import com.rnxmpp.RNXMPPPackage; public class MainActivity extends ReactActivity { diff --git a/XmppDemo/android/app/src/main/java/com/xmppdemo/MainApplication.java b/XmppDemo/android/app/src/main/java/com/xmppdemo/MainApplication.java index 28ecacbe..413e3eee 100644 --- a/XmppDemo/android/app/src/main/java/com/xmppdemo/MainApplication.java +++ b/XmppDemo/android/app/src/main/java/com/xmppdemo/MainApplication.java @@ -12,7 +12,7 @@ import java.util.Arrays; import java.util.List; -import rnxmpp.RNXMPPPackage; +import com.rnxmpp.RNXMPPPackage; public class MainApplication extends Application implements ReactApplication { diff --git a/android/build.gradle b/android/build.gradle index a4f1f729..c595821a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -32,13 +32,13 @@ repositories { dependencies { compile "com.facebook.react:react-native:+" - compile "org.igniterealtime.smack:smack-android:4.1.0" + compile "org.igniterealtime.smack:smack-android:4.1.9" // Optional for XMPPTCPConnection - compile "org.igniterealtime.smack:smack-tcp:4.1.0" + compile "org.igniterealtime.smack:smack-tcp:4.1.9" // Optional for XMPP-IM (RFC 6121) support (Roster, Threaded Chats, …) - compile "org.igniterealtime.smack:smack-im:4.1.0" + compile "org.igniterealtime.smack:smack-im:4.1.9" // Optional for XMPP extensions support - compile "org.igniterealtime.smack:smack-extensions:4.1.0" + compile "org.igniterealtime.smack:smack-extensions:4.1.9" // Support SCRAM-SHA-1 - compile "org.igniterealtime.smack:smack-sasl-provided:4.1.0" + compile "org.igniterealtime.smack:smack-sasl-provided:4.1.9" } diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 27357b61..1c9cd3d8 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,3 +1,3 @@ - + \ No newline at end of file diff --git a/android/src/main/java/rnxmpp/RNXMPPModule.java b/android/src/main/java/rnxmpp/RNXMPPModule.java index 724d61e9..e853c9bf 100644 --- a/android/src/main/java/rnxmpp/RNXMPPModule.java +++ b/android/src/main/java/rnxmpp/RNXMPPModule.java @@ -1,20 +1,23 @@ -package rnxmpp; +package com.rnxmpp; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReadableArray; +import org.jivesoftware.smackx.muc.MultiUserChat; +import org.jivesoftware.smackx.muc.MultiUserChatManager; + import java.util.logging.Logger; -import rnxmpp.service.RNXMPPCommunicationBridge; -import rnxmpp.service.XmppServiceSmackImpl; +import com.rnxmpp.service.RNXMPPCommunicationBridge; +import com.rnxmpp.service.XmppServiceSmackImpl; /** * Created by Kristian Frølund on 7/19/16. * Copyright (c) 2016. Teletronics. All rights reserved */ -public class RNXMPPModule extends ReactContextBaseJavaModule implements rnxmpp.service.XmppService { +public class RNXMPPModule extends ReactContextBaseJavaModule implements com.rnxmpp.service.XmppService { public static final String MODULE_NAME = "RNXMPP"; Logger logger = Logger.getLogger(RNXMPPModule.class.getName()); @@ -42,6 +45,21 @@ public void connect(String jid, String password, String authMethod, String hostn this.xmppService.connect(jid, password, authMethod, hostname, port); } + @ReactMethod + public void joinRoom(String mucJid, String userNickname) { + this.xmppService.joinRoom(mucJid, userNickname); + } + + @ReactMethod + public void sendRoomMessage(String mucJid, String text) { + this.xmppService.sendRoomMessage(mucJid, text); + } + + @ReactMethod + public void leaveRoom(String mucJid) { + this.xmppService.leaveRoom(mucJid); + } + @Override @ReactMethod public void message(String text, String to, String thread){ diff --git a/android/src/main/java/rnxmpp/RNXMPPPackage.java b/android/src/main/java/rnxmpp/RNXMPPPackage.java index bc82b723..63fb004d 100644 --- a/android/src/main/java/rnxmpp/RNXMPPPackage.java +++ b/android/src/main/java/rnxmpp/RNXMPPPackage.java @@ -1,4 +1,4 @@ -package rnxmpp; +package com.rnxmpp; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.JavaScriptModule; diff --git a/android/src/main/java/rnxmpp/service/RNXMPPCommunicationBridge.java b/android/src/main/java/rnxmpp/service/RNXMPPCommunicationBridge.java index e0ea86c5..4d6d1572 100644 --- a/android/src/main/java/rnxmpp/service/RNXMPPCommunicationBridge.java +++ b/android/src/main/java/rnxmpp/service/RNXMPPCommunicationBridge.java @@ -1,4 +1,4 @@ -package rnxmpp.service; +package com.rnxmpp.service; import android.support.annotation.Nullable; @@ -15,7 +15,9 @@ import org.jivesoftware.smack.roster.RosterEntry; import org.jivesoftware.smack.roster.RosterGroup; -import rnxmpp.utils.Parser; +import com.rnxmpp.utils.Parser; + + /** * Created by Kristian Frølund on 7/19/16. diff --git a/android/src/main/java/rnxmpp/service/XmppGroupMessageListener.java b/android/src/main/java/rnxmpp/service/XmppGroupMessageListener.java new file mode 100644 index 00000000..0608fe34 --- /dev/null +++ b/android/src/main/java/rnxmpp/service/XmppGroupMessageListener.java @@ -0,0 +1,6 @@ +package com.rnxmpp.service; + + +public interface XmppGroupMessageListener { + +} diff --git a/android/src/main/java/rnxmpp/service/XmppGroupMessageListenerImpl.java b/android/src/main/java/rnxmpp/service/XmppGroupMessageListenerImpl.java new file mode 100644 index 00000000..2a6da00b --- /dev/null +++ b/android/src/main/java/rnxmpp/service/XmppGroupMessageListenerImpl.java @@ -0,0 +1,26 @@ +package com.rnxmpp.service; + +import org.jivesoftware.smack.packet.Message; +import org.jivesoftware.smack.MessageListener; + +import java.util.logging.Level; +import java.util.logging.Logger; + +public class XmppGroupMessageListenerImpl implements XmppGroupMessageListener, MessageListener { + + XmppServiceListener xmppServiceListener; + Logger logger; + + public XmppGroupMessageListenerImpl(XmppServiceListener xmppServiceListener, Logger logger) { + this.xmppServiceListener = xmppServiceListener; + this.logger = logger; + } + + public void processMessage(Message message) { + this.xmppServiceListener.onMessage(message); + logger.log(Level.INFO, "Received a new group message", message.toString()); + } + +} + + diff --git a/android/src/main/java/rnxmpp/service/XmppService.java b/android/src/main/java/rnxmpp/service/XmppService.java index 1d153968..c7737e87 100644 --- a/android/src/main/java/rnxmpp/service/XmppService.java +++ b/android/src/main/java/rnxmpp/service/XmppService.java @@ -1,4 +1,4 @@ -package rnxmpp.service; +package com.rnxmpp.service; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReadableArray; @@ -16,6 +16,15 @@ public interface XmppService { @ReactMethod void connect(String jid, String password, String authMethod, String hostname, Integer port); + @ReactMethod + void joinRoom(String mucJid, String userNickname); + + @ReactMethod + void sendRoomMessage(String roomJid, String text); + + @ReactMethod + void leaveRoom(String mucJid); + @ReactMethod void message(String text, String to, String thread); @@ -33,4 +42,6 @@ public interface XmppService { @ReactMethod void sendStanza(String stanza); + + } diff --git a/android/src/main/java/rnxmpp/service/XmppServiceListener.java b/android/src/main/java/rnxmpp/service/XmppServiceListener.java index a3fbd239..c57508f9 100644 --- a/android/src/main/java/rnxmpp/service/XmppServiceListener.java +++ b/android/src/main/java/rnxmpp/service/XmppServiceListener.java @@ -1,4 +1,4 @@ -package rnxmpp.service; +package com.rnxmpp.service; import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.Message; diff --git a/android/src/main/java/rnxmpp/service/XmppServiceSmackImpl.java b/android/src/main/java/rnxmpp/service/XmppServiceSmackImpl.java index b067d68c..b878e359 100644 --- a/android/src/main/java/rnxmpp/service/XmppServiceSmackImpl.java +++ b/android/src/main/java/rnxmpp/service/XmppServiceSmackImpl.java @@ -1,4 +1,4 @@ -package rnxmpp.service; +package com.rnxmpp.service; import com.facebook.react.bridge.ReadableArray; @@ -25,17 +25,24 @@ import org.jivesoftware.smack.tcp.XMPPTCPConnection; import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration; import org.jivesoftware.smack.util.XmlStringBuilder; +import org.jivesoftware.smack.util.TLSUtils; +import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode; +import org.jivesoftware.smackx.muc.MultiUserChat; +import org.jivesoftware.smackx.muc.MultiUserChatManager; +import org.jivesoftware.smackx.muc.DiscussionHistory; import android.os.AsyncTask; import java.io.IOException; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; + + import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; -import rnxmpp.ssl.UnsafeSSLContext; - /** * Created by Kristian Frølund on 7/19/16. @@ -45,6 +52,7 @@ public class XmppServiceSmackImpl implements XmppService, ChatManagerListener, StanzaListener, ConnectionListener, ChatMessageListener, RosterLoadedListener { XmppServiceListener xmppServiceListener; Logger logger = Logger.getLogger(XmppServiceSmackImpl.class.getName()); + XmppGroupMessageListenerImpl groupMessageListner; XMPPTCPConnection connection; Roster roster; @@ -72,7 +80,7 @@ public void connect(String jid, String password, String authMethod, String hostn .setServiceName(serviceName) .setUsernameAndPassword(jidParts[0], password) .setConnectTimeout(3000) - //.setDebuggerEnabled(true) + // .setDebuggerEnabled(true) .setSecurityMode(ConnectionConfiguration.SecurityMode.required); if (serviceNameParts.length>1){ @@ -87,7 +95,13 @@ public void connect(String jid, String password, String authMethod, String hostn confBuilder.setPort(port); } if (trustedHosts.contains(hostname) || (hostname == null && trustedHosts.contains(serviceName))){ - confBuilder.setCustomSSLContext(UnsafeSSLContext.INSTANCE.getContext()); + confBuilder.setSecurityMode(SecurityMode.disabled); + TLSUtils.disableHostnameVerificationForTlsCertificicates(confBuilder); + try { + TLSUtils.acceptAllCertificates(confBuilder); + } catch (NoSuchAlgorithmException | KeyManagementException e) { + e.printStackTrace(); + } } XMPPTCPConnectionConfiguration connectionConfiguration = confBuilder.build(); connection = new XMPPTCPConnection(connectionConfiguration); @@ -124,6 +138,45 @@ protected void onPostExecute(Void dummy) { }.execute(); } + + public void joinRoom(String roomJid, String userNickname) { + MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection); + MultiUserChat muc = manager.getMultiUserChat(roomJid); + try { + DiscussionHistory history = new DiscussionHistory(); + history.setMaxStanzas(0); + muc.join(userNickname, "", history, connection.getPacketReplyTimeout()); + groupMessageListner = new XmppGroupMessageListenerImpl(this.xmppServiceListener, logger); + muc.addMessageListener(groupMessageListner); + } catch (SmackException.NotConnectedException | XMPPException.XMPPErrorException | SmackException.NoResponseException e) { + logger.log(Level.WARNING, "Could not join chat room", e); + } + } + + public void sendRoomMessage(String roomJid, String text) { + + MultiUserChatManager mucManager = MultiUserChatManager.getInstanceFor(connection); + MultiUserChat muc = mucManager.getMultiUserChat(roomJid); + + try { + muc.sendMessage(text); + } catch (SmackException e) { + logger.log(Level.WARNING, "Could not send group message", e); + } + } + + public void leaveRoom(String roomJid) { + MultiUserChatManager mucManager = MultiUserChatManager.getInstanceFor(connection); + MultiUserChat muc = mucManager.getMultiUserChat(roomJid); + + try { + muc.leave(); + muc.removeMessageListener(groupMessageListner); + } catch (SmackException e) { + logger.log(Level.WARNING, "Could not leave chat room", e); + } + } + @Override public void message(String text, String to, String thread) { String chatIdentifier = (thread == null ? to : thread); @@ -236,6 +289,7 @@ public void authenticated(XMPPConnection connection, boolean resumed) { @Override public void processMessage(Chat chat, Message message) { this.xmppServiceListener.onMessage(message); + // logger.log(Level.INFO, "Received a new message", message.toString()); } @Override diff --git a/android/src/main/java/rnxmpp/ssl/NullTrustManager.java b/android/src/main/java/rnxmpp/ssl/NullTrustManager.java deleted file mode 100644 index affe7266..00000000 --- a/android/src/main/java/rnxmpp/ssl/NullTrustManager.java +++ /dev/null @@ -1,37 +0,0 @@ -package rnxmpp.ssl; - -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; - -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - -/** - * Created by Kristian Frølund on 7/20/16. - * Copyright (c) 2016. Teletronics. All rights reserved - */ - -public enum NullTrustManager { - - INSTANCE(); - - private TrustManager[] trustAllCerts; - - NullTrustManager() { - trustAllCerts = new TrustManager[]{new X509TrustManager() { - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - - @Override - public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {} - - @Override - public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {} - }}; - }; - - public TrustManager[] get() { - return trustAllCerts; - } -} diff --git a/android/src/main/java/rnxmpp/ssl/UnsafeSSLContext.java b/android/src/main/java/rnxmpp/ssl/UnsafeSSLContext.java deleted file mode 100644 index 2d7905e7..00000000 --- a/android/src/main/java/rnxmpp/ssl/UnsafeSSLContext.java +++ /dev/null @@ -1,33 +0,0 @@ -package rnxmpp.ssl; - -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; - -import javax.net.ssl.SSLContext; - -/** - * Created by Kristian Frølund on 7/20/16. - * Copyright (c) 2016. Teletronics. All rights reserved - */ - -public enum UnsafeSSLContext { - INSTANCE(); - - private SSLContext context; - - private UnsafeSSLContext(){ - context = null; - try { - context = SSLContext.getInstance("SSL"); - context.init(null, NullTrustManager.INSTANCE.get(), null); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (KeyManagementException e) { - e.printStackTrace(); - } - } - - public SSLContext getContext() { - return context; - } -} diff --git a/android/src/main/java/rnxmpp/utils/Parser.java b/android/src/main/java/rnxmpp/utils/Parser.java index 161ab188..f48bc42f 100644 --- a/android/src/main/java/rnxmpp/utils/Parser.java +++ b/android/src/main/java/rnxmpp/utils/Parser.java @@ -2,7 +2,7 @@ * Copyright (c) 2016. Teletronics. All rights reserved */ -package rnxmpp.utils; +package com.rnxmpp.utils; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReadableArray; diff --git a/index.js b/index.js index 956e4686..fed8dd9f 100644 --- a/index.js +++ b/index.js @@ -147,6 +147,18 @@ class XMPP { React.NativeModules.RNXMPP.disconnectAfterSending(); } } + + joinRoom(roomJID, nickname) { + React.NativeModules.RNXMPP.joinRoom(roomJID, nickname); + } + + sendRoomMessage(message, roomJID) { + React.NativeModules.RNXMPP.sendRoomMessage(message, roomJID); + } + + leaveRoom(roomJID) { + React.NativeModules.RNXMPP.leaveRoom(roomJID); + } } module.exports = new XMPP();