mas01mj@732: /* mas01mj@732: Copyright (c) 2009, Adobe Systems Incorporated mas01mj@732: All rights reserved. mas01mj@732: mas01mj@732: Redistribution and use in source and binary forms, with or without mas01mj@732: modification, are permitted provided that the following conditions are mas01mj@732: met: mas01mj@732: mas01mj@732: * Redistributions of source code must retain the above copyright notice, mas01mj@732: this list of conditions and the following disclaimer. mas01mj@732: mas01mj@732: * Redistributions in binary form must reproduce the above copyright mas01mj@732: notice, this list of conditions and the following disclaimer in the mas01mj@732: documentation and/or other materials provided with the distribution. mas01mj@732: mas01mj@732: * Neither the name of Adobe Systems Incorporated nor the names of its mas01mj@732: contributors may be used to endorse or promote products derived from mas01mj@732: this software without specific prior written permission. mas01mj@732: mas01mj@732: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS mas01mj@732: IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, mas01mj@732: THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR mas01mj@732: PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR mas01mj@732: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, mas01mj@732: EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, mas01mj@732: PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR mas01mj@732: PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF mas01mj@732: LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING mas01mj@732: NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS mas01mj@732: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. mas01mj@732: */ mas01mj@732: mas01mj@732: package com.adobe.protocols.dict.util mas01mj@732: { mas01mj@732: import com.adobe.net.proxies.RFC2817Socket; mas01mj@732: import flash.events.ProgressEvent; mas01mj@732: mas01mj@732: public class SocketHelper mas01mj@732: extends RFC2817Socket mas01mj@732: { mas01mj@732: private var terminator:String = "\r\n.\r\n"; mas01mj@732: private var buffer:String; mas01mj@732: public static var COMPLETE_RESPONSE:String = "completeResponse"; mas01mj@732: mas01mj@732: public function SocketHelper() mas01mj@732: { mas01mj@732: super(); mas01mj@732: buffer = new String(); mas01mj@732: addEventListener(ProgressEvent.SOCKET_DATA, incomingData); mas01mj@732: } mas01mj@732: mas01mj@732: private function incomingData(event:ProgressEvent):void mas01mj@732: { mas01mj@732: buffer += readUTFBytes(bytesAvailable); mas01mj@732: buffer = buffer.replace(/250[^\r\n]+\r\n/, ""); // Get rid of all 250s. Don't need them. mas01mj@732: var codeStr:String = buffer.substring(0, 3); mas01mj@732: if (!isNaN(parseInt(codeStr))) mas01mj@732: { mas01mj@732: var code:uint = uint(codeStr); mas01mj@732: if (code == 150 || code >= 200) mas01mj@732: { mas01mj@732: buffer = buffer.replace("\r\n", this.terminator); mas01mj@732: } mas01mj@732: } mas01mj@732: mas01mj@732: while (buffer.indexOf(this.terminator) != -1) mas01mj@732: { mas01mj@732: var chunk:String = buffer.substring(0, buffer.indexOf(this.terminator)); mas01mj@732: buffer = buffer.substring(chunk.length + this.terminator.length, buffer.length); mas01mj@732: throwResponseEvent(chunk); mas01mj@732: } mas01mj@732: } mas01mj@732: mas01mj@732: private function throwResponseEvent(response:String):void mas01mj@732: { mas01mj@732: var responseEvent:CompleteResponseEvent = new CompleteResponseEvent(CompleteResponseEvent.COMPLETE_RESPONSE); mas01mj@732: responseEvent.response = response; mas01mj@732: dispatchEvent(responseEvent); mas01mj@732: } mas01mj@732: } mas01mj@732: }