Example #1
0
        private void DeletePath(IAsyncResult result)
        {
            TransportClass oTransportClass = result.AsyncState as TransportClass;

            try
            {
                if (null != oTransportClass.m_sDeletePath && false == string.IsNullOrEmpty(oTransportClass.m_sDeletePath))
                {
                    ITaskResultInterface oTaskResult = oTransportClass.m_oTaskResult;

                    string sKey = oTransportClass.m_sDeletePath;

                    oTaskResult.RemoveBegin(sKey, RemoveTaskCallback, oTransportClass);
                }
                else
                {
                    oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
                }
            }
            catch (Exception e)
            {
                _log.Error("Exception catched in DeletePath:", e);

                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
            }
        }
Example #2
0
        private void WriteFileCallback(IAsyncResult result)
        {
            TransportClass oTransportClass = result.AsyncState as TransportClass;

            try
            {
                int        nWriteBytes;
                ErrorTypes eError = oTransportClass.m_oStorage.WriteFileEnd(result, out nWriteBytes);
                if (ErrorTypes.NoError == eError)
                {
                    string sSiteUrl = UrlBuilder.UrlWithoutPath(oTransportClass.m_oContext.Request);
                    string sFileUrl = sSiteUrl + Constants.mc_sResourceServiceUrlRel + HttpUtility.UrlEncode(oTransportClass.m_sPath) + "&nocache=true" + "&deletepath=" + HttpUtility.UrlEncode(oTransportClass.m_sDeletePath) + "&filename=" + HttpUtility.UrlEncode(oTransportClass.m_sFilename);
                    writeXml(oTransportClass.m_oContext, sFileUrl, "100", true, null);
                }
                else
                {
                    writeXml(oTransportClass.m_oContext, null, null, null, eError);
                }
                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
            }
            catch
            {
                writeXml(oTransportClass.m_oContext, null, null, null, ErrorTypes.StorageWrite);
                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
            }
        }
Example #3
0
        private void RemoveTaskCallback(IAsyncResult result)
        {
            TransportClass oTransportClass = result.AsyncState as TransportClass;

            try
            {
                ITaskResultInterface oTaskResult = oTransportClass.m_oTaskResult;

                if (null != oTaskResult)
                {
                    oTaskResult.RemoveEnd(result);
                }

                Storage oStorage = oTransportClass.m_oStorage;

                if (null != oStorage)
                {
                    oStorage.RemovePathBegin(oTransportClass.m_sDeletePath, RemoveFileCallback, oTransportClass);
                }
            }
            catch (Exception e)
            {
                _log.Error("Exception catched in RemoveTaskCallback:", e);

                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
            }
        }
Example #4
0
        private void ReadFileCallback(IAsyncResult result)
        {
            TransportClass oTransportClass = result.AsyncState as TransportClass;
            HttpContext    context         = oTransportClass.m_oContext;

            try
            {
                FileStream oFileStreamInput = oTransportClass.m_oFileStreamInput;
                oTransportClass.nReadWriteBytes = oFileStreamInput.EndRead(result);
                oFileStreamInput.Dispose();
                if (oTransportClass.nReadWriteBytes <= 0)
                {
                    context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
                }
                else
                {
                    byte[] aOutput = null;
                    if (gc_sJsExtention == Path.GetExtension(oTransportClass.m_sFontNameDecoded))
                    {
                        aOutput = GetJsContent(oTransportClass.m_aBuffer, oTransportClass.m_sFontNameDecoded.Substring(0, oTransportClass.m_sFontNameDecoded.Length - gc_sJsExtention.Length));
                        oTransportClass.nReadWriteBytes = aOutput.Length;
                    }
                    else
                    {
                        aOutput = oTransportClass.m_aBuffer;
                        byte[] guidOdttf = { 0xA0, 0x66, 0xD6, 0x20, 0x14, 0x96, 0x47, 0xfa, 0x95, 0x69, 0xB8, 0x50, 0xB0, 0x41, 0x49, 0x48 };

                        int nMaxLen = Math.Min(32, aOutput.Length);
                        for (int i = 0; i < nMaxLen; ++i)
                        {
                            aOutput[i] ^= guidOdttf[i % 16];
                        }
                    }
                    context.Response.OutputStream.BeginWrite(aOutput, 0, aOutput.Length, WriteBufferCallback, oTransportClass);
                }
            }
            catch (Exception e)
            {
                context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));

                _log.Error("Exception catched in ReadFileCallback:", e);
            }
        }
        private void ReadFileCallback(IAsyncResult result)
        {
            TransportClass oTransportClass = result.AsyncState as TransportClass;
            HttpContext    context         = oTransportClass.m_oContext;

            try
            {
                Storage oStorage = oTransportClass.m_oStorage;
                if (null != oStorage)
                {
                    int        nReadWriteBytes = 0;
                    ErrorTypes eResult         = oStorage.ReadFileEnd(result, out nReadWriteBytes);
                    if (ErrorTypes.NoError != eResult)
                    {
                        context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    }
                    else
                    {
                        context.Response.AddHeader("Content-Length", nReadWriteBytes.ToString());
                        context.Response.StatusCode = (int)HttpStatusCode.OK;
                    }
                    context.Response.Flush();
                    context.Response.End();
                }
                if (null != oTransportClass.m_sDeletePath && false == string.IsNullOrEmpty(oTransportClass.m_sDeletePath))
                {
                    TaskResult oTaskResult = oTransportClass.m_oTaskResult;

                    string sKey = oTransportClass.m_sDeletePath;

                    oTaskResult.RemoveBegin(sKey, RemoveTaskCallback, oTransportClass);
                }
                else
                {
                    oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
                }
            }
            catch (Exception e)
            {
                context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));

                _log.Error("Exception catched in ReadFileCallback:", e);
            }
        }
Example #6
0
        private void RemoveFileCallback(IAsyncResult result)
        {
            TransportClass oTransportClass = result.AsyncState as TransportClass;
            HttpContext    context         = oTransportClass.m_oContext;

            try
            {
                Storage oStorage = oTransportClass.m_oStorage;
                if (null != oStorage)
                {
                    oStorage.RemovePathEnd(result);
                }
                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
            }
            catch (Exception e)
            {
                _log.Error("Exception catched in RemoveFileCallback:", e);

                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
            }
        }
        private void WriteBufferCallback(IAsyncResult result)
        {
            TransportClass oTransportClass = result.AsyncState as TransportClass;
            HttpContext    context         = oTransportClass.m_oContext;

            try
            {
                context.Response.OutputStream.EndWrite(result);
                context.Response.AddHeader("Content-Length", oTransportClass.nReadWriteBytes.ToString());
                context.Response.StatusCode = (int)HttpStatusCode.OK;
                context.Response.Flush();
                context.Response.End();
                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
            }
            catch (Exception e)
            {
                context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));

                _log.Error("Exception catched in WriteBufferCallback:", e);
            }
        }
        private void ReadFileCallback(IAsyncResult result)
        {
            TransportClass oTransportClass = result.AsyncState as TransportClass;
            HttpContext    context         = oTransportClass.m_oContext;

            try
            {
                FileStream oFileStreamInput = oTransportClass.m_oFileStreamInput;
                oTransportClass.nReadWriteBytes = oFileStreamInput.EndRead(result);
                oFileStreamInput.Dispose();
                if (oTransportClass.nReadWriteBytes <= 0)
                {
                    context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                    oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
                }
                else
                {
                    byte[] aOutput = null;
                    if (".js" == Path.GetExtension(m_sFontName))
                    {
                        aOutput = GetJsContent(oTransportClass.m_aBuffer);
                        oTransportClass.nReadWriteBytes = aOutput.Length;
                    }
                    else
                    {
                        aOutput = oTransportClass.m_aBuffer;
                    }
                    context.Response.OutputStream.BeginWrite(aOutput, 0, aOutput.Length, WriteBufferCallback, oTransportClass);
                }
            }
            catch (Exception e)
            {
                context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));

                _log.Error("Exception catched in ReadFileCallback:", e);
            }
        }
Example #9
0
        private void ReadContextCallback(IAsyncResult result)
        {
            TransportClass oTransportClass = result.AsyncState as TransportClass;

            try
            {
                oTransportClass.m_oAsyncContextRead.ReadContextEnd(result);
                oTransportClass.m_oAsyncContextRead.m_aOutput.Position = 0;
                oTransportClass.m_oStorage.WriteFileBegin(oTransportClass.m_sPath, oTransportClass.m_oAsyncContextRead.m_aOutput, WriteFileCallback, oTransportClass);
            }
            catch
            {
                writeXml(oTransportClass.m_oContext, null, null, null, ErrorTypes.StorageWrite);
                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
            }
        }
Example #10
0
        private void WriteBufferCallback(IAsyncResult result)
        {
            TransportClass oTransportClass = result.AsyncState as TransportClass;
            HttpContext    context         = oTransportClass.m_oContext;

            try
            {
                context.Response.OutputStream.EndWrite(result);
                context.Response.AppendHeader("Content-Length", oTransportClass.nReadWriteBytes.ToString());
                context.Response.StatusCode = (int)HttpStatusCode.OK;
            }
            catch (HttpException httpEx)
            {
                _log.Error("HttpException catched in WriteBufferCallback:", httpEx);
            }
            catch (Exception e)
            {
                _log.Error("Exception catched in WriteBufferCallback:", e);

                context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
            }
            try
            {
                if (context.Response.IsClientConnected)
                {
                    context.Response.Flush();
                }
            }
            catch (Exception e)
            {
                _log.Error("Exception catched in WriteBufferCallback, while response end:", e);
            }
            finally
            {
                try
                {
                    oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
                }
                catch (Exception e)
                {
                    _log.Error("Exception catched in WriteBufferCallback, while callback:", e);
                }
            }
        }
Example #11
0
        private void GetFileInfoCallback(IAsyncResult result)
        {
            TransportClass oTransportClass = result.AsyncState as TransportClass;
            HttpContext    context         = oTransportClass.m_oContext;
            bool           bStartAsync     = false;

            try
            {
                string          sPath    = oTransportClass.m_sPath;
                Storage         oStorage = oTransportClass.m_oStorage;
                StorageFileInfo oStorageFileInfo;
                if (ErrorTypes.NoError == oStorage.GetFileInfoEnd(result, out oStorageFileInfo) && null != oStorageFileInfo)
                {
                    string   sETag         = oStorageFileInfo.m_oLastModify.Ticks.ToString("x");
                    DateTime oLastModified = oStorageFileInfo.m_oLastModify;

                    DateTime oDateTimeUtcNow = DateTime.UtcNow;
                    _log.InfoFormat("oLastModified = {0}", oLastModified);
                    _log.InfoFormat("oDateTimeUtcNow = {0}", oDateTimeUtcNow);

                    if (oLastModified.CompareTo(oDateTimeUtcNow) > 0)
                    {
                        _log.DebugFormat("LastModifiedTimeStamp changed from {0} to {1}", oLastModified, oDateTimeUtcNow);
                        oLastModified = oDateTimeUtcNow;
                    }

                    string sRequestIfModifiedSince = context.Request.Headers["If-Modified-Since"];
                    string sRequestETag            = context.Request.Headers["If-None-Match"];
                    bool   bNoModify = false;
                    if (false == string.IsNullOrEmpty(sRequestETag) || false == string.IsNullOrEmpty(sRequestIfModifiedSince))
                    {
                        bool bRequestETag = true;
                        if (false == string.IsNullOrEmpty(sRequestETag) && sRequestETag != sETag)
                        {
                            bRequestETag = false;
                        }
                        bool bRequestIfModifiedSince = true;
                        if (false == string.IsNullOrEmpty(sRequestIfModifiedSince))
                        {
                            try
                            {
                                DateTime oRequestIfModifiedSince = DateTime.ParseExact(sRequestIfModifiedSince, "R", System.Globalization.CultureInfo.InvariantCulture);
                                if ((oRequestIfModifiedSince - oLastModified).TotalSeconds > 1)
                                {
                                    bRequestIfModifiedSince = false;
                                }
                            }
                            catch
                            {
                                bRequestIfModifiedSince = false;
                            }
                        }
                        if (bRequestETag && bRequestIfModifiedSince)
                        {
                            context.Response.StatusCode = (int)HttpStatusCode.NotModified;
                            bNoModify = true;
                        }
                    }
                    if (false == bNoModify)
                    {
                        context.Response.Cache.SetETag(sETag);

                        context.Response.Cache.SetLastModified(oLastModified.ToLocalTime());

                        oStorage.ReadFileBegin(sPath, context.Response.OutputStream, ReadFileCallback, oTransportClass);
                        bStartAsync = true;
                    }
                }
                else
                {
                    context.Response.StatusCode = (int)HttpStatusCode.NotFound;
                }
            }
            catch (Exception e)
            {
                _log.Error("Exception catched in GetFileInfoCallback:", e);

                context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
            }
            if (!bStartAsync)
            {
                oTransportClass.m_oCallback(new AsyncOperationData(oTransportClass));
            }
        }