コード例 #1
0
        private static void DoOpen(C4Socket *socket, C4Address *address, C4Slice options)
        {
            var builder = new UriBuilder {
                Host   = address->hostname.CreateString(),
                Scheme = address->scheme.CreateString(),
                Port   = address->port,
                Path   = address->path.CreateString()
            };

            Uri uri;

            try {
                uri = builder.Uri;
            } catch (Exception) {
                Native.c4socket_closed(socket, new C4Error(C4ErrorCode.InvalidParameter));
                return;
            }

            if (uri == null)
            {
                Native.c4socket_closed(socket, new C4Error(C4ErrorCode.InvalidParameter));
                return;
            }

            var opts =
                FLSliceExtensions.ToObject(NativeRaw.FLValue_FromTrustedData((FLSlice)options)) as
                Dictionary <string, object>;
            var replicationOptions = new ReplicatorOptionsDictionary(opts);
            var socketWrapper      = new WebSocketWrapper(uri, socket, replicationOptions);
            var id = Interlocked.Increment(ref _NextID);

            socket->nativeHandle = (void *)id;
            Sockets[id]          = socketWrapper;
            socketWrapper.Start();
        }
コード例 #2
0
        public unsafe WebSocketWrapper(Uri url, C4Socket *socket, [NotNull] ReplicatorOptionsDictionary options)
        {
            _socket  = socket;
            _logic   = new HTTPLogic(url);
            _options = options;

            SetupAuth();
        }
コード例 #3
0
        internal override void Authenticate(ReplicatorOptionsDictionary options)
        {
            CBDebug.MustNotBeNull(Log.To.Sync, Tag, nameof(options), options);

            var cookie = new Cookie(CookieName, SessionID);

            options.Cookies.Add(cookie);
        }
コード例 #4
0
        public unsafe WebSocketWrapper(Uri url, C4Socket *socket, [NotNull] ReplicatorOptionsDictionary options)
        {
            _socket  = socket;
            _logic   = new HTTPLogic(url);
            _options = options;
            _reachability.StatusChanged += ReachabilityChanged;
            _reachability.Url            = url;
            _reachability.Start();

            SetupAuth();
        }
コード例 #5
0
        internal override void Authenticate([NotNull] ReplicatorOptionsDictionary options)
        {
            Debug.Assert(options != null);

            var authDict = new AuthOptionsDictionary
            {
                Username = Username,
                Password = Password,
                Type     = AuthType.HttpBasic
            };

            options.Auth = authDict;
        }
コード例 #6
0
        private static void DoOpen(C4Socket *socket, C4Address *address, FLSlice options, void *context)
        {
            var builder = new UriBuilder {
                Host   = address->hostname.CreateString(),
                Scheme = address->scheme.CreateString(),
                Port   = address->port,
                Path   = address->path.CreateString()
            };

            Uri uri;

            try {
                uri = builder.Uri;
            } catch (Exception) {
                Native.c4socket_closed(socket, new C4Error(C4ErrorCode.InvalidParameter));
                return;
            }

            if (uri == null)
            {
                Native.c4socket_closed(socket, new C4Error(C4ErrorCode.InvalidParameter));
                return;
            }

            var opts =
                FLSliceExtensions.ToObject(NativeRaw.FLValue_FromData((FLSlice)options, FLTrust.Trusted)) as
                Dictionary <string, object>;
            var replicationOptions = new ReplicatorOptionsDictionary(opts);

            var id = Interlocked.Increment(ref _NextID);

            Native.c4Socket_setNativeHandle(socket, (void *)id);
            var socketWrapper = new WebSocketWrapper(uri, socket, replicationOptions);
            var replicator    = GCHandle.FromIntPtr((IntPtr)context).Target as Replicator;

            replicator?.WatchForCertificate(socketWrapper);
            replicator?.CheckForCookiesToSet(socketWrapper);
            Sockets.AddOrUpdate(id, socketWrapper, (k, v) => socketWrapper);
            socketWrapper.Start();
        }
コード例 #7
0
        internal override void Authenticate([NotNull] ReplicatorOptionsDictionary options)
        {
            Debug.Assert(options != null);

            var authDict = new AuthOptionsDictionary
            {
                Username = Username,
                Type     = AuthType.HttpBasic
            };

            // TODO string Password will be deprecated and replaced with byte array password
            if (String.IsNullOrEmpty(Password))
            {
                authDict.PasswordSecureString = PasswordSecureString;
            }
            else
            {
                authDict.Password = Password;
            }

            options.Auth = authDict;
        }
コード例 #8
0
 internal abstract void Authenticate([NotNull] ReplicatorOptionsDictionary options);