Dave Cross: Still Munging Data With Perl: Online event - Mar 27 Learn more

## Copyright(c) 1998-2002 by John C. Siracusa. All rights reserved. This
## program is free software; you can redistribute it and/or modify it under
## the same terms as Perl itself.
use strict;
use vars qw(@ISA @EXPORT_OK %EXPORT_TAGS $VERSION %HTLC_COLORS);
$VERSION = '0.80';
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(
HTLC_CHECKBYTES HTLC_COLORS HTLC_DATA_BAN HTLC_DATA_CHAT HTLC_DATA_DESTDIR
HTLC_DATA_DIRECTORY HTLC_DATA_FILE HTLC_DATA_FILE_RENAME HTLC_DATA_HTXF_SIZE
HTLC_DATA_ICON HTLC_DATA_LOGIN HTLC_DATA_MSG HTLC_DATA_NEWS_POST
HTLC_DATA_NICKNAME HTLC_DATA_OPTION HTLC_DATA_PASSWORD HTLC_DATA_PCHAT_REF
HTLC_DATA_PCHAT_SUBJECT HTLC_DATA_RFLT HTLC_DATA_SOCKET HTLC_DEFAULT_ICON
HTLC_DEFAULT_LOGIN HTLC_DEFAULT_NICK HTLC_EWOULDBLOCK HTLC_FOLDER_TYPE
HTLC_HDR_CHAT HTLC_HDR_FILE_DELETE HTLC_HDR_FILE_GET HTLC_HDR_FILE_GETINFO
HTLC_HDR_FILE_LIST HTLC_HDR_FILE_MKDIR HTLC_HDR_FILE_MOVE HTLC_HDR_FILE_PUT
HTLC_HDR_FILE_SETINFO HTLC_HDR_LOGIN HTLC_HDR_MSG HTLC_HDR_NEWS_GETFILE
HTLC_HDR_NEWS_POST HTLC_HDR_PCHAT_ACCEPT HTLC_HDR_PCHAT_CLOSE
HTLC_HDR_PCHAT_CREATE HTLC_HDR_PCHAT_DECLINE HTLC_HDR_PCHAT_INVITE
HTLC_HDR_PCHAT_SUBJECT HTLC_HDR_USER_CHANGE HTLC_HDR_USER_CREATE
HTLC_HDR_USER_GETINFO HTLC_HDR_USER_GETLIST HTLC_HDR_USER_KICK
HTLC_HDR_USER_OPEN HTLC_INFO_FALIAS_TYPE HTLC_INFO_FOLDER_TYPE
HTLC_MACOS_TO_UNIX_TIME HTLC_MAGIC HTLC_MAGIC_LEN HTLC_MAX_PATHLEN
HTLC_NEWLINE HTLC_PATH_SEPARATOR HTLC_TASK_BAN HTLC_TASK_FILE_DELETE
HTLC_TASK_FILE_GET HTLC_TASK_FILE_INFO HTLC_TASK_FILE_LIST
HTLC_TASK_FILE_MKDIR HTLC_TASK_FILE_MOVE HTLC_TASK_FILE_PUT HTLC_TASK_KICK
HTLC_TASK_LOGIN HTLC_TASK_NEWS HTLC_TASK_NEWS_POST HTLC_TASK_PCHAT_ACCEPT
HTLC_TASK_PCHAT_CREATE HTLC_TASK_SEND_MSG HTLC_TASK_SET_INFO
HTLC_TASK_USER_INFO HTLC_TASK_USER_LIST HTLC_UNIX_TO_MACOS_TIME
HTLS_DATA_AGREEMENT HTLS_DATA_CHAT HTLS_DATA_COLOR HTLS_DATA_FILE_COMMENT
HTLS_DATA_FILE_CREATOR HTLS_DATA_FILE_CTIME HTLS_DATA_FILE_ICON
HTLS_DATA_FILE_LIST HTLS_DATA_FILE_MTIME HTLS_DATA_FILE_NAME
HTLS_DATA_FILE_SIZE HTLS_DATA_FILE_TYPE HTLS_DATA_HTXF_REF HTLS_DATA_HTXF_SIZE
HTLS_DATA_ICON HTLS_DATA_MSG HTLS_DATA_NEWS HTLS_DATA_NEWS_POST
HTLS_DATA_NICKNAME HTLS_DATA_PCHAT_REF HTLS_DATA_PCHAT_SUBJECT
HTLS_DATA_SERVER_MSG HTLS_DATA_SOCKET HTLS_DATA_TASK_ERROR HTLS_DATA_USER_INFO
HTLS_DATA_USER_LIST HTLS_HDR_AGREEMENT HTLS_HDR_CHAT HTLS_HDR_MSG
HTLS_HDR_NEWS_POST HTLS_HDR_PCHAT_INVITE HTLS_HDR_PCHAT_SUBJECT
HTLS_HDR_PCHAT_USER_JOIN HTLS_HDR_PCHAT_USER_LEAVE HTLS_HDR_POLITE_QUIT
HTLS_HDR_TASK HTLS_HDR_USER_CHANGE HTLS_HDR_USER_LEAVE HTLS_MAGIC
HTLS_MAGIC_LEN HTLS_TCPPORT HTRK_MAGIC HTRK_MAGIC_LEN HTRK_TCPPORT
HTRK_UDPPORT HTXF_BUFSIZE HTXF_MAGIC HTXF_MAGIC_LEN HTXF_PARTIAL_CREATOR
HTXF_PARTIAL_TYPE HTXF_RESUME_MAGIC HTXF_RFLT_MAGIC HTXF_TCPPORT
PATH_SEPARATOR SIZEOF_HL_DATA_HDR SIZEOF_HL_FILE_FORK_HDR
SIZEOF_HL_FILE_LIST_HDR SIZEOF_HL_FILE_UPLOAD_HDR SIZEOF_HL_FILE_XFER_HDR
SIZEOF_HL_LONG_HDR SIZEOF_HL_PROTO_HDR SIZEOF_HL_SHORT_HDR
SIZEOF_HL_TASK_FILLER SIZEOF_HL_USER_LIST_HDR MACOS_MAX_FILENAME
HTLS_DATA_REPLY HTLS_DATA_IS_REPLY);
%EXPORT_TAGS = ('all' => \@EXPORT_OK);
use constant PATH_SEPARATOR => ($^O eq 'MacOS') ? ':' : '/';
%HTLC_COLORS = (0 => 'gray',
1 => 'black',
2 => 'red',
3 => 'pink');
# Hotline gives times relative to Mac OS epoch. Add this constant to the
# times returned by Hotline to get the time since the unix epoch.
use constant HTLC_MACOS_TO_UNIX_TIME => -2082830400;
# Add this constant to Unix times to get Hotline (Mac OS) times
use constant HTLC_UNIX_TO_MACOS_TIME => 2082830400;
use constant HTLC_PATH_SEPARATOR => ':';
use constant HTLC_FOLDER_TYPE => 'fldr';
use constant HTXF_PARTIAL_TYPE => 'HTft';
use constant HTXF_PARTIAL_CREATOR => 'HTLC';
use constant HTLC_INFO_FOLDER_TYPE => 'Folder';
use constant HTLC_INFO_FALIAS_TYPE => 'Folder Alias';
use constant HTLC_DEFAULT_NICK => 'guest';
use constant HTLC_DEFAULT_LOGIN => 'guest';
use constant HTLC_DEFAULT_ICON => 410;
use constant HTLC_EWOULDBLOCK => 2; # Can be anything > 1, really
use constant HTLC_MAX_PATHLEN => 255;
use constant MACOS_MAX_FILENAME => 31;
# Arbitrary unique task type constants
use constant HTLC_TASK_FILE_DELETE => 1;
use constant HTLC_TASK_FILE_GET => 2;
use constant HTLC_TASK_FILE_INFO => 3;
use constant HTLC_TASK_FILE_LIST => 4;
use constant HTLC_TASK_FILE_MKDIR => 5;
use constant HTLC_TASK_FILE_MOVE => 6;
use constant HTLC_TASK_FILE_PUT => 7;
use constant HTLC_TASK_KICK => 8;
use constant HTLC_TASK_LOGIN => 9;
use constant HTLC_TASK_NEWS => 10;
use constant HTLC_TASK_NEWS_POST => 11;
use constant HTLC_TASK_SEND_MSG => 12;
use constant HTLC_TASK_SET_INFO => 13;
use constant HTLC_TASK_USER_INFO => 14;
use constant HTLC_TASK_USER_LIST => 15;
use constant HTLC_TASK_PCHAT_CREATE => 16;
use constant HTLC_TASK_PCHAT_ACCEPT => 17;
use constant HTLC_TASK_BAN => 18;
use constant HTRK_TCPPORT => 5498;
use constant HTRK_UDPPORT => 5499;
use constant HTLS_TCPPORT => 5500;
use constant HTXF_TCPPORT => 5501;
use constant HTXF_BUFSIZE => 4096;
use constant HTLC_NEWLINE => "\015";
use constant HTLC_MAGIC => pack("C12", 84, 82, 84, 80, 72, 79, 84, 76, 0, 1, 0, 2);
use constant HTLC_MAGIC_LEN => 12;
use constant HTLS_MAGIC => pack("C8", 84, 82, 84, 80, 0, 0, 0, 0);
use constant HTLS_MAGIC_LEN => 8;
use constant HTRK_MAGIC => pack("C6", 72, 84, 82, 75, 0, 1);
use constant HTRK_MAGIC_LEN => 6;
use constant HTXF_MAGIC => pack("C4", 72, 84, 88, 70);
use constant HTXF_MAGIC_LEN => 4;
use constant HTXF_RFLT_MAGIC => pack("C4", 82, 70, 76, 84);
use constant HTXF_RESUME_MAGIC => pack("n3", 0x00CC, 0x0002, 0x0001);
use constant HTLC_HDR_CHAT => 0x00000069;
use constant HTLC_HDR_FILE_DELETE => 0x000000CC;
use constant HTLC_HDR_FILE_GET => 0x000000CA;
use constant HTLC_HDR_FILE_GETINFO => 0x000000CE;
use constant HTLC_HDR_FILE_LIST => 0x000000C8;
use constant HTLC_HDR_FILE_MKDIR => 0x000000CD;
use constant HTLC_HDR_FILE_MOVE => 0x000000D0;
use constant HTLC_HDR_FILE_PUT => 0x000000CB;
use constant HTLC_HDR_FILE_SETINFO => 0x000000CF;
use constant HTLC_HDR_LOGIN => 0x0000006B;
use constant HTLC_HDR_MSG => 0x0000006C;
use constant HTLC_HDR_NEWS_GETFILE => 0x00000065;
use constant HTLC_HDR_NEWS_POST => 0x00000067;
use constant HTLC_HDR_PCHAT_ACCEPT => 0x00000073;
use constant HTLC_HDR_PCHAT_CLOSE => 0x00000074;
use constant HTLC_HDR_PCHAT_CREATE => 0x00000070;
use constant HTLC_HDR_PCHAT_DECLINE => 0x00000072;
use constant HTLC_HDR_PCHAT_INVITE => 0x00000071;
use constant HTLC_HDR_PCHAT_SUBJECT => 0x00000078;
use constant HTLC_HDR_USER_CHANGE => 0x00000130;
use constant HTLC_HDR_USER_CREATE => 0x0000015E;
use constant HTLC_HDR_USER_GETINFO => 0x0000012F;
use constant HTLC_HDR_USER_GETLIST => 0x0000012C;
use constant HTLC_HDR_USER_KICK => 0x0000006E;
use constant HTLC_HDR_USER_OPEN => 0x00000160;
use constant HTLC_DATA_BAN => 0x0071;
use constant HTLC_DATA_CHAT => 0x0065;
use constant HTLC_DATA_DESTDIR => 0x00D4;
use constant HTLC_DATA_DIRECTORY => 0x00CA;
use constant HTLC_DATA_FILE => 0x00C9;
use constant HTLC_DATA_FILE_RENAME => 0x00D3;
use constant HTLC_DATA_HTXF_SIZE => 0x006C;
use constant HTLC_DATA_ICON => 0x0068;
use constant HTLC_DATA_LOGIN => 0x0069;
use constant HTLC_DATA_MSG => 0x0065;
use constant HTLC_DATA_NEWS_POST => 0x0065;
use constant HTLC_DATA_NICKNAME => 0x0066;
use constant HTLC_DATA_OPTION => 0x006D;
use constant HTLC_DATA_PASSWORD => 0x006A;
use constant HTLC_DATA_PCHAT_REF => 0x0072;
use constant HTLC_DATA_PCHAT_SUBJECT => 0x0073;
use constant HTLC_DATA_RFLT => 0x00CB;
use constant HTLC_DATA_SOCKET => 0x0067;
use constant HTLS_HDR_AGREEMENT => 0x0000006D;
use constant HTLS_HDR_CHAT => 0x0000006A;
use constant HTLS_HDR_MSG => 0x00000068;
use constant HTLS_HDR_NEWS_POST => 0x00000066;
use constant HTLS_HDR_PCHAT_INVITE => 0x00000071;
use constant HTLS_HDR_PCHAT_SUBJECT => 0x00000077;
use constant HTLS_HDR_PCHAT_USER_JOIN => 0x00000075;
use constant HTLS_HDR_PCHAT_USER_LEAVE => 0x00000076;
use constant HTLS_HDR_POLITE_QUIT => 0x0000006F;
use constant HTLS_HDR_TASK => 0x00010000;
use constant HTLS_HDR_USER_CHANGE => 0x0000012D;
use constant HTLS_HDR_USER_LEAVE => 0x0000012E;
use constant HTLS_DATA_AGREEMENT => 0x0065;
use constant HTLS_DATA_CHAT => 0x0065;
use constant HTLS_DATA_COLOR => 0x0070;
use constant HTLS_DATA_REPLY => 0x00D6;
use constant HTLS_DATA_IS_REPLY => 0x0071;
use constant HTLS_DATA_ICON => 0x0068;
use constant HTLS_DATA_NEWS => 0x0065;
use constant HTLS_DATA_NICKNAME => 0x0066;
use constant HTLS_DATA_SERVER_MSG => 0x006D;
use constant HTLS_DATA_SOCKET => 0x0067;
use constant HTLS_DATA_TASK_ERROR => 0x0064;
use constant HTLS_DATA_USER_INFO => 0x0065;
use constant HTLS_DATA_USER_LIST => 0x012C;
use constant HTLS_DATA_FILE_COMMENT => 0x00D2;
use constant HTLS_DATA_FILE_CREATOR => 0x00CE;
use constant HTLS_DATA_FILE_CTIME => 0x00D0;
use constant HTLS_DATA_FILE_ICON => 0x00D5;
use constant HTLS_DATA_FILE_LIST => 0x00C8;
use constant HTLS_DATA_FILE_MTIME => 0x00D1;
use constant HTLS_DATA_FILE_NAME => 0x00C9;
use constant HTLS_DATA_FILE_SIZE => 0x00CF;
use constant HTLS_DATA_FILE_TYPE => 0x00CD;
use constant HTLS_DATA_HTXF_REF => 0x006B;
use constant HTLS_DATA_HTXF_SIZE => 0x006C;
use constant HTLS_DATA_MSG => 0x0065;
use constant HTLS_DATA_NEWS_POST => 0x0065;
use constant HTLS_DATA_PCHAT_REF => 0x0072;
use constant HTLS_DATA_PCHAT_SUBJECT => 0x0073;
use constant SIZEOF_HL_PROTO_HDR => 20;
use constant SIZEOF_HL_DATA_HDR => 4;
use constant SIZEOF_HL_SHORT_HDR => 6;
use constant SIZEOF_HL_LONG_HDR => 8;
use constant SIZEOF_HL_FILE_LIST_HDR => 24;
use constant SIZEOF_HL_USER_LIST_HDR => 12;
use constant SIZEOF_HL_TASK_FILLER => 2;
use constant SIZEOF_HL_FILE_XFER_HDR => 40;
use constant SIZEOF_HL_FILE_UPLOAD_HDR => 111;
use constant SIZEOF_HL_FILE_FORK_HDR => 16;
1;