public static void sendFileReq
	(
		Socket sckIn
		, String strId
		, EzimFileOut efoIn
	)
		throws Exception
	{
		if
		(
			efoIn != null
			&& strId != null && strId.length() > 0
		)
		{
			EzimDtxSemantics.initByteArrays();

			long lSize = 0;

			FileInputStream fisTmp = null;

			try
			{
				OutputStream osTmp = sckIn.getOutputStream();
				lSize = efoIn.getFile().length();
				fisTmp = new FileInputStream(efoIn.getFile());

				efoIn.setSize(lSize);

				// create necessary header fields
				Hashtable<String, String> htTmp
					= new Hashtable<String, String>();

				htTmp.put
				(
					EzimDtxSemantics.HDR_CTYPE
					, EzimDtxFileSemantics.CTYPE_FILEREQ
				);
				htTmp.put
				(
					EzimDtxSemantics.HDR_CLEN
					, "0"
				);
				htTmp.put
				(
					EzimDtxFileSemantics.HDR_FILEREQID
					, strId
				);
				htTmp.put
				(
					EzimDtxFileSemantics.HDR_FILENAME
					, efoIn.getFile().getName()
				);
				htTmp.put
				(
					EzimDtxFileSemantics.HDR_FILESIZE
					, Long.toString(lSize)
				);

				// output header in bytes
				EzimDtxSemantics.sendHeaderBytes(sckIn, htTmp);

				// make sure everything is sent
				osTmp.flush();
			}
			finally
			{
				try
				{
					if (fisTmp != null) fisTmp.close();
				}
				catch(Exception e)
				{
					EzimLogger.getInstance().severe(e.getMessage(), e);
				}
			}
		}
	}