示例#1
0
 internal void RegisterContext(HttpListenerContext context)
 {
     try {
         Monitor.Enter(registry);
         registry [context] = context;
         Monitor.Enter(wait_queue);
         Monitor.Enter(ctx_queue);
         if (wait_queue.Count == 0)
         {
             ctx_queue.Add(context);
         }
         else
         {
             ListenerAsyncResult ares = (ListenerAsyncResult)wait_queue [0];
             wait_queue.RemoveAt(0);
             ares.Complete(context);
         }
     } finally {
         Monitor.Exit(ctx_queue);
         Monitor.Exit(wait_queue);
         Monitor.Exit(registry);
     }
 }
示例#2
0
        public HttpListenerContext EndGetContext(IAsyncResult asyncResult)
        {
            CheckDisposed();
            if (asyncResult == null)
            {
                throw new ArgumentNullException("asyncResult");
            }

            ListenerAsyncResult ares = asyncResult as ListenerAsyncResult;

            if (ares == null)
            {
                throw new ArgumentException("Wrong IAsyncResult.", "asyncResult");
            }

            if (!ares.IsCompleted)
            {
                ares.AsyncWaitHandle.WaitOne();
            }

            lock (wait_queue) {
                int idx = wait_queue.IndexOf(ares);
                if (idx >= 0)
                {
                    wait_queue.RemoveAt(idx);
                }
            }

            HttpListenerContext context = ares.GetContext();

            if (auth_schemes != AuthenticationSchemes.Anonymous)
            {
                context.ParseAuthentication();
            }
            return(context);            // This will throw on error.
        }
示例#3
0
        static void InvokeCallback(object o)
        {
            ListenerAsyncResult ares = (ListenerAsyncResult)o;

            ares.cb(ares);
        }