public static void parser(File fIn, Socket sckIn, EzimContact ecIn)
	{
		Hashtable<String, String> htHdr = null;
		InputStream isData = null;
		String strCType = null;
		String strCLen = null;
		long lCLen = 0;

		try
		{
			isData = sckIn.getInputStream();
			htHdr = EzimDtxSemantics.getHeader(fIn);
			strCType = htHdr.get(EzimDtxSemantics.HDR_CTYPE);
			strCLen = htHdr.get(EzimDtxSemantics.HDR_CLEN);

			if (strCType == null)
			{
				throw new Exception
				(
					"Header field \"Content-Type\" is missing."
				);
			}
			else if (strCLen == null)
			{
				throw new Exception
				(
					"Header field \"Content-Length\" is missing."
				);
			}
			else
			{
				lCLen = Long.parseLong(strCLen);

				// receive incoming message
				if (strCType.equals(EzimDtxSemantics.CTYPE_MSG))
				{
					EzimDtxMessageSemantics.messageParser
					( 
						isData
						, ecIn
						, htHdr
						, lCLen
					);
				}
				else
				{
					EzimDtxFileSemantics.fileParser
					(
						isData
						, sckIn
						, ecIn
						, htHdr
						, strCType
						, lCLen
					);
				}
			}
		}
		catch(EzimException ee)
		{
			EzimLogger.getInstance().warning(ee.getMessage(), ee);
		}
		catch(Exception e)
		{
			EzimLogger.getInstance().severe(e.getMessage(), e);
		}
		finally
		{
			try
			{
				if (isData != null) isData.close();
			}
			catch(Exception e)
			{
				EzimLogger.getInstance().severe(e.getMessage(), e);
			}
		}
	}