function SendCommandWin(Command: string): string; begin Writeln(mfout, Command + #13); Result := stat; end;
function FillBlank(Source: string; number: Integer): string; var a: Integer; begin Result := ''''''''; for a := Length(trim(Source)) to number do Result := Result + '''' ''''; end;
function IpToLong(ip: string): Longint; var x, i: Byte; ipx: array[0..3] of Byte; v: Integer; begin Result := 0; Longint(ipx) := 0; i := 0; for x := 1 to Length(ip) do if ip[x] = ''''.'''' then begin Inc(i); if i = 4 then Exit; end else begin if not (ip[x] in [''''0''''..''''9'''']) then Exit; v := ipx[i] * 10 + Ord(ip[x]) - Ord(''''0''''); if v > 255 then Exit; ipx[i] := v; end; Result := Longint(ipx); end;
function HostToLong(AHost: string): Longint; var Host: PHost; begin Result := IpToLong(AHost); if Result = 0 then begin Host := GetHostByName(PChar(AHost)); if Host <> nil then Result := Longint(Host^.Addr^^); end; end;
function LongToIp(Long: Longint): string; var ipx: array[0..3] of Byte; i: Byte; begin Longint(ipx) := long; Result := ''''''''; for i := 0 to 3 do Result := Result + IntToStr(ipx[i]) + ''''.''''; SetLength(Result, Length(Result) - 1); end;
procedure Disconnect(Socket: Integer); begin ShutDown(Socket, 1); CloseSocket(Socket); end;
function CallServer(Server: string; Port: Word): Integer; var SockAddr: TSockAddr; begin Result := socket(Internet, Stream, 0); if Result = -1 then Exit; FillChar(SockAddr, SizeOf(SockAddr), 0); SockAddr.Family := Internet; SockAddr.Port := swap(Port); SockAddr.Addr := HostToLong(Server); if Connect(Result, SockAddr, SizeOf(SockAddr)) <> 0 then begin Disconnect(Result); Result := -1; end; end;
function OutputSock(var F: TTextRec): Integer; far; begin if F.BufPos <> 0 then begin Send(F.Handle, F.BufPtr^, F.BufPos, 0); F.BufPos := 0; end; Result := 0; end;
function InputSock(var F: TTextRec): Integer; far; var Size: Longint; begin F.BufEnd := 0; F.BufPos := 0; Result := 0; repeat if (IoctlSocket(F.Handle, fIoNbRead, Size) < 0) then begin EofSock := True; Exit; end; until (Size >= 0); F.BufEnd := Recv(F.Handle, F.BufPtr, F.BufSize, 0); EofSock := (F.Bufend = 0); end;
function CloseSock(var F: TTextRec): Integer; far; begin Disconnect(F.Handle); F.Handle := -1; Result := 0; end;
function OpenSock(var F: TTextRec): Integer; far; begin if F.Mode = fmInput then begin EofSock := False; F.BufPos := 0; F.BufEnd := 0; F.InOutFunc := @InputSock; F.FlushFunc := nil; end else begin F.Mode := fmOutput; F.InOutFunc := @OutputSock; F.FlushFunc := @OutputSock; end; F.CloseFunc := @CloseSock; Result := 0; end;
procedure AssignCrtSock(Socket:integer; Var Input,Output:TextFile); begin with TTextRec(Input) do begin Handle := Socket; Mode := fmClosed; BufSize := SizeOf(Buffer); BufPtr := @Buffer; OpenFunc := @OpenSock; end; with TTextRec(Output) do begin Handle := Socket; Mode := fmClosed; BufSize := SizeOf(Buffer); BufPtr := @Buffer; OpenFunc := @OpenSock; end; Reset(Input); Rewrite(Output); end;
function ConnectServer(mhost: string; mport: Integer): Integer; var tmp: string; begin mClient := TTcpClient.Create(nil); mClient.RemoteHost := mhost; mClient.RemotePort := IntToStr(mport); mClient.Connect; mconnhandle := callserver(mhost, mport); if (mconnHandle<>-1) then begin AssignCrtSock(mconnHandle, mFin, MFout); tmp := stat; tmp := SendCommand(''''HELO bellona.com.tr''''); if Copy(tmp, 1, 3) = ''''250'''' then begin Result := StrToInt(Copy(tmp, 1, 3)); end; end; end;
function ConnectServerWin(mhost: string; mport: Integer): Integer; var tmp: string; begin mClient := TTcpClient.Create(nil); mClient.RemoteHost := mhost; mClient.RemotePort := IntToStr(mport); mClient.Connect; mconnhandle := callserver(mhost, mport); if (mconnHandle<>-1) then begin AssignCrtSock(mconnHandle, mFin, MFout); tmp := stat; tmp := SendCommandWin(''''HELO bellona.com.tr''''); if Copy(tmp, 1, 3) = ''''250'''' then begin Result := StrToInt(Copy(tmp, 1, 3)); end; end; end;
function DisConnectServer: Integer; begin closesocket(mconnhandle); mClient.Disconnect; mclient.Free; end;