mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-05 20:42:26 +00:00
forgot to add Internet.Mod.
This commit is contained in:
parent
801de6a0c2
commit
b1d7006dfc
4 changed files with 106 additions and 10 deletions
19
IRC.Mod
19
IRC.Mod
|
|
@ -1,28 +1,35 @@
|
||||||
MODULE IRC;
|
MODULE IRC;
|
||||||
IMPORT Internet, Out, Strings, types;
|
IMPORT Internet, Out, Strings, types;
|
||||||
|
|
||||||
CONST strLen = 1024;
|
CONST msgLen = 512; (* message length not more than 512 characters *)
|
||||||
|
|
||||||
VAR
|
VAR
|
||||||
connection : Internet.Socket;
|
connection : Internet.Socket;
|
||||||
|
|
||||||
PROCEDURE Auth*(user, nick: ARRAY OF CHAR): BOOLEAN;
|
PROCEDURE Auth*(user, nick, owner: ARRAY OF CHAR): BOOLEAN;
|
||||||
VAR
|
VAR
|
||||||
str0, str1: ARRAY 255 OF CHAR;
|
str0, str1: ARRAY 255 OF CHAR;
|
||||||
b : BOOLEAN;
|
b : BOOLEAN;
|
||||||
BEGIN
|
BEGIN
|
||||||
(* "USER test 0 0 :test\r\n" *)
|
(* "USER test 0 * :test\r\n" *)
|
||||||
(* "NICK test\r\n\000\060 :test\r\n"*)
|
(* "NICK test\r\n\000\060 :test\r\n"*)
|
||||||
COPY("USER ", str0);
|
|
||||||
|
str1[0] := 0AX; str1[1] := 0DX; str1[2] := 0X;
|
||||||
|
|
||||||
|
COPY("USER ", str0);
|
||||||
Strings.Append(user, str0);
|
Strings.Append(user, str0);
|
||||||
Strings.Append(" 0 0 :", str0);
|
Strings.Append(" 0 0 :", str0);
|
||||||
Strings.Append(nick, str0);
|
Strings.Append(owner, str0);
|
||||||
str1[0] := 0AX; str1[1] := 0DX; str1[2] := 0X;
|
(* by the spec the command is terminated by \r\n *)
|
||||||
Strings.Append(str1, str0);
|
Strings.Append(str1, str0);
|
||||||
Out.String("sending:"); Out.Ln;
|
Out.String("sending:"); Out.Ln;
|
||||||
Out.String(str0); Out.Ln;
|
Out.String(str0); Out.Ln;
|
||||||
b := Internet.Write(connection, str0, Strings.Length(str0));
|
b := Internet.Write(connection, str0, Strings.Length(str0));
|
||||||
IF b THEN Out.String("wrote!"); Out.Ln ELSE Out.String("write failed"); Out.Ln END;
|
IF b THEN Out.String("wrote!"); Out.Ln ELSE Out.String("write failed"); Out.Ln END;
|
||||||
|
COPY ("NICK ", str0);
|
||||||
|
Strings.Append (nick, str0);
|
||||||
|
Strings.Append(str1, str0);
|
||||||
|
IF b THEN Out.String("wrote!"); Out.Ln ELSE Out.String("write failed"); Out.Ln END;
|
||||||
RETURN b
|
RETURN b
|
||||||
|
|
||||||
END Auth;
|
END Auth;
|
||||||
|
|
|
||||||
82
Internet.Mod
Normal file
82
Internet.Mod
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
MODULE Internet;
|
||||||
|
IMPORT sockets, netdb, Platform, types, Out, SYSTEM;
|
||||||
|
|
||||||
|
TYPE
|
||||||
|
|
||||||
|
Socket* = LONGINT; (* INT32 *)
|
||||||
|
|
||||||
|
Int16 = types.Int16;
|
||||||
|
Int32 = types.Int32;
|
||||||
|
Int64 = types.Int64;
|
||||||
|
|
||||||
|
PROCEDURE Write*(fd: Socket; VAR buf: ARRAY OF CHAR; len: LONGINT): BOOLEAN;
|
||||||
|
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;*)
|
||||||
|
RETURN FALSE
|
||||||
|
ELSE
|
||||||
|
(*Out.String("write() success."); Out.Ln;*)
|
||||||
|
RETURN TRUE
|
||||||
|
END;
|
||||||
|
END Write;
|
||||||
|
|
||||||
|
|
||||||
|
PROCEDURE Connect*(host, port: ARRAY OF CHAR; VAR conn: Socket): BOOLEAN;
|
||||||
|
VAR
|
||||||
|
hints, res : netdb.addrInfo;
|
||||||
|
pres, pres2, phints: netdb.PaddrInfo;
|
||||||
|
tmpaddr : SYSTEM.ADDRESS;
|
||||||
|
tmp32 : netdb.Int32;
|
||||||
|
(*conn : netdb.Int32;*)
|
||||||
|
BEGIN
|
||||||
|
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;
|
||||||
|
|
||||||
|
phints := SYSTEM.VAL(netdb.PaddrInfo, SYSTEM.ADR(hints));
|
||||||
|
pres := SYSTEM.VAL(netdb.PaddrInfo, SYSTEM.ADR(res));
|
||||||
|
pres2 := SYSTEM.VAL(netdb.PaddrInfo, SYSTEM.ADR(pres));
|
||||||
|
|
||||||
|
tmp32 := netdb.getAddrInfo(host, port, phints, pres2);
|
||||||
|
|
||||||
|
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(pres^.aiFamily, pres^.aiSockType, pres^.aiProtocol);
|
||||||
|
|
||||||
|
IF conn = -1 THEN
|
||||||
|
Out.String("socket() returned -1, error"); Out.Ln;
|
||||||
|
HALT(1);
|
||||||
|
ELSE
|
||||||
|
Out.String("socket() succeeded."); Out.Ln;
|
||||||
|
END;
|
||||||
|
|
||||||
|
tmpaddr := SYSTEM.ADR(pres^.aiAddr);
|
||||||
|
|
||||||
|
tmp32 := sockets.Connect(conn, pres^.aiAddr, pres^.aiAddrLen);
|
||||||
|
netdb.freeAddrInfo(pres);
|
||||||
|
IF tmp32 = 0 THEN
|
||||||
|
Out.String("connect() succeeded."); Out.Ln;
|
||||||
|
RETURN TRUE
|
||||||
|
ELSE
|
||||||
|
Out.String("connect() failed."); Out.Ln;
|
||||||
|
RETURN FALSE
|
||||||
|
END;
|
||||||
|
|
||||||
|
|
||||||
|
END Connect;
|
||||||
|
|
||||||
|
|
||||||
|
END Internet.
|
||||||
|
|
@ -126,6 +126,12 @@ TYPE
|
||||||
BEGIN
|
BEGIN
|
||||||
RETURN connect(sockfd, sockaddr, addrlen)
|
RETURN connect(sockfd, sockaddr, addrlen)
|
||||||
END Connect;
|
END Connect;
|
||||||
|
|
||||||
|
(* ssize_t recv(int sockfd, void *buf, size_t len, int flags); *)
|
||||||
|
|
||||||
|
PROCEDURE -recv(sockfd: Int32; buf: SYS.ADDRESS; len: Int64; flags: Int32):Int64
|
||||||
|
"(HUGEINT)recv(sockfd, buf, len, flags)";
|
||||||
|
|
||||||
(*
|
(*
|
||||||
PROCEDURE -SizeofSockaddr(): INTEGER
|
PROCEDURE -SizeofSockaddr(): INTEGER
|
||||||
"sizeof(sockaddr)";
|
"sizeof(sockaddr)";
|
||||||
|
|
|
||||||
9
test.Mod
9
test.Mod
|
|
@ -4,21 +4,22 @@ IMPORT IRC, Out;
|
||||||
|
|
||||||
VAR
|
VAR
|
||||||
|
|
||||||
owner, nick, host, port, channel: ARRAY 32 OF CHAR;
|
owner, user, nick, host, port, channel: ARRAY 32 OF CHAR;
|
||||||
|
|
||||||
PROCEDURE testBot;
|
PROCEDURE testBot;
|
||||||
VAR b : BOOLEAN;
|
VAR b : BOOLEAN;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF IRC.Connect(host, port) # FALSE THEN
|
IF IRC.Connect(host, port) # FALSE THEN
|
||||||
|
|
||||||
b := IRC.Auth("norayr", "norayr");
|
b := IRC.Auth(user, nick, owner);
|
||||||
|
|
||||||
END;
|
END;
|
||||||
END testBot;
|
END testBot;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
owner := "norayr";
|
owner := "norayr_tanakian";
|
||||||
nick := "norayr";
|
user := "norayr";
|
||||||
|
nick := "arnet";
|
||||||
host := "irc.freenode.net";
|
host := "irc.freenode.net";
|
||||||
port := "6667";
|
port := "6667";
|
||||||
channel := "#oberon";
|
channel := "#oberon";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue