mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-05 20:42:26 +00:00
80 lines
2 KiB
Modula-2
80 lines
2 KiB
Modula-2
MODULE irc;
|
|
IMPORT sockets, netdb, Platform, Strings, types, Out, SYSTEM;
|
|
|
|
CONST strLen = 1024;
|
|
|
|
TYPE
|
|
Int16 = types.Int16;
|
|
Int32 = types.Int32;
|
|
Int64 = types.Int64;
|
|
|
|
|
|
VAR
|
|
nick*, channel*, host*, port*, user*, command*, where*, message*, sep*, target*: ARRAY strLen OF CHAR;
|
|
|
|
PROCEDURE rawWrite(fd: Int32; VAR buf: ARRAY OF CHAR; len: LONGINT);
|
|
VAR
|
|
l: SYSTEM.ADDRESS;
|
|
r: INTEGER;
|
|
BEGIN
|
|
l := SYSTEM.ADR(buf);
|
|
r := Platform.Write(fd, l, len);
|
|
IF r = -1 THEN
|
|
Out.String("write() failed."); Out.Ln;
|
|
HALT(1);
|
|
ELSE
|
|
Out.String("write() success."); Out.Ln;
|
|
END;
|
|
END rawWrite;
|
|
|
|
PROCEDURE connect*;
|
|
VAR hints : netdb.addrInfo;
|
|
res: netdb.PaddrInfo;
|
|
tmp32 : netdb.Int32;
|
|
conn : netdb.Int32;
|
|
str0, str1: ARRAY 255 OF CHAR;
|
|
BEGIN
|
|
(*hints.aiFamily := sockets.AfInet;*)
|
|
hints.aiFamily := sockets.AfUnspec;
|
|
hints.aiSockType := sockets.SockStream;
|
|
hints.aiFlags := 0;
|
|
hints.aiProtocol := netdb.ipprotoTCP;
|
|
hints.aiAddrLen := 0;
|
|
hints.aiAddr := 0; hints.aiCanonName := 0; hints.aiNext := 0;
|
|
|
|
NEW(res);
|
|
tmp32 := netdb.getAddrInfo(host, port, hints, res);
|
|
IF tmp32 # 0 THEN
|
|
Out.String("getaddrinfo() failed"); Out.Ln;
|
|
HALT(1);
|
|
ELSE
|
|
Out.String("getaddrinfo() returned 0, success"); Out.Ln;
|
|
END;
|
|
conn := sockets.Socket(res^.aiFamily, res^.aiSockType, res^.aiProtocol);
|
|
IF conn = -1 THEN
|
|
Out.String("socket() returned -1, error"); Out.Ln;
|
|
HALT(1);
|
|
ELSE
|
|
Out.String("socket() succeeded."); Out.Ln;
|
|
END;
|
|
tmp32 := sockets.Connect(conn, res^.aiAddr, res^.aiAddrLen);
|
|
IF tmp32 = 0 THEN
|
|
Out.String("connect() succeeded."); Out.Ln;
|
|
ELSE
|
|
Out.String("connect() failed."); Out.Ln; HALT(1);
|
|
END;
|
|
|
|
(* "USER test 0 0 :test\r\n" *)
|
|
(* "NICK test\r\n\000\060 :test\r\n"*)
|
|
COPY("USER ", str0);
|
|
Strings.Append(user, str0);
|
|
Strings.Append(" 0 0 :", str0);
|
|
Strings.Append(nick, str0);
|
|
str1[0] := 0AX; str1[1] := 0DX; str1[2] := 0X;
|
|
Strings.Append(str1, str0);
|
|
rawWrite(conn, str0, Strings.Length(str0));
|
|
END connect;
|
|
|
|
BEGIN
|
|
|
|
END irc.
|