source: abuse/tags/pd/abuse/src/net/mac/nettst.c @ 49

Last change on this file since 49 was 49, checked in by Sam Hocevar, 11 years ago
  • Imported original public domain release, for future reference.
  • Property svn:keywords set to Id
File size: 3.5 KB
Line 
1#include <appletalk.h>
2#include <stdio.h>
3
4char ourName[60];
5
6short mpp = 0, socket = 0;
7NamesTableEntry *NTPtr = 0L;
8MPPParamBlock p;
9ATDDPRec ddp;
10char buffer[1000];
11AddrBlock *users;
12
13int Setup()
14{
15        printf("NetTst 1.0\n\nReady\n");
16
17        return 1;       
18}
19
20short DoRegName()
21{
22        EntityName name;
23        short err, len;
24        short index;
25        StringHandle H;
26       
27        ourName[0] = 1;
28        ourName[1] = '?';
29
30/*
31        p.MPPioCompletion = 0L;
32        p.MPPioRefNum = mpp;
33        p.DDPsocket = 0;
34        p.DDPlistener = (Ptr) StripAddress((Ptr) (ProcPtr) DDPListener);
35        err = POpenSkt(&p,true);
36*/
37        socket = 0;
38        err = DDPOpenSocket(&socket, nil);
39
40/*     
41        while (p.MPPioResult == 1)
42                ;
43*/
44        if (err) {
45                Message("\pCould not open AppleTalk socket !!!");
46                return(err);
47        }
48//      socket = p.DDPsocket;
49        name.zoneStr[0] = 1;
50        name.zoneStr[1] = '*';
51        BlockMove("\pNeighborhood Watch",name.typeStr, 20L);
52        len = sizeof(NamesTableEntry);
53       
54        NTPtr = (NamesTableEntry*) NewPtrClear(len);
55        if (!NTPtr)
56                return(MemErr);
57        NTPtr->nt.nteAddress.aSocket = socket;
58        p.NBPinterval = 3;
59        p.NBPcount = 3;
60        p.NBPverifyFlag = true;
61        p.NBPntQElPtr = (Ptr) NTPtr;
62        BlockMove(ourName,&(NTPtr->nt.entityData[0]),33L);
63        index = ourName[0] + 1;
64        BlockMove(name.typeStr,&(NTPtr->nt.entityData[index]),33L);
65        index += name.typeStr[0] + 1;
66        BlockMove(name.zoneStr,&(NTPtr->nt.entityData[index]),33L);
67        err = PRegisterName(&p,true);
68        while (p.MPPioResult == 1)
69                ;
70        err = p.MPPioResult;
71        while (err == nbpDuplicate) {
72                ourName[0]++;
73                ourName[ourName[0]] = '1';
74                BlockMove(ourName,&(NTPtr->nt.entityData[0]),33L);
75                index = ourName[0] + 1;
76                BlockMove(name.typeStr,&(NTPtr->nt.entityData[index]),33L);
77                index += name.typeStr[0] + 1;
78                BlockMove(name.zoneStr,&(NTPtr->nt.entityData[index]),33L);
79                err = PRegisterName(&p,true);
80                while (p.MPPioResult == 1)
81                        ;
82                err = p.MPPioResult;
83        }
84        if (err)
85                Message("\pCould not register name in network.");
86
87//      InitDDPListener(&ddp);
88
89        return(noErr);
90}
91
92void Names()
93{
94        EntityName name;
95        short err, counter;
96        Handle buffer = 0L;
97        short found;
98        MPPParamBlock p;
99        char Entity[110];
100       
101        p.MPPioCompletion = 0L;
102        p.MPPioRefNum = mpp;
103        buffer = NewHandle(LOOKUPBUFSIZE);
104        if (!buffer) {
105                return;
106        }
107        Message("\pFindind Neighbors...");
108        HLock(buffer);
109        BlockMove("\pNeighborhood Watch",name.typeStr, 20L);
110        name.objStr[0] = 1;
111        name.objStr[1] = '=';
112        name.zoneStr[0] = 1;
113        name.zoneStr[1] = '*';
114        BlockMove(name.objStr,Entity,33L);
115        counter = Entity[0] + 1;
116        BlockMove(name.typeStr,&Entity[counter],33L);
117        counter += name.typeStr[0] + 1;
118        BlockMove(name.zoneStr,&Entity[counter],33L);
119        p.NBPinterval = 5;
120        p.NBPcount = 4;
121        p.NBPentityPtr = Entity;
122        p.NBPretBuffPtr = *buffer;
123        p.NBPretBuffSize = LOOKUPBUFSIZE;
124        p.NBPmaxToGet = LOOKUPBUFSIZE / 110;
125        p.NBPnumGotten = 0;
126        err = PLookupName(&p,false);
127        err = p.MPPioResult;
128        if (!err) {
129                found = p.NBPnumGotten;
130                for (counter = 0; counter < found; counter++)
131                        err = myNBPExtract(*buffer,found,counter + 1,&name, &(users[counter]));
132                        Message(name.objStr);
133        }
134        if (buffer)
135                DisposHandle(buffer);
136        buffer = 0L;
137}
138
139main()
140{
141        short err, len;
142        char st[256];
143
144        if (!Setup())
145                return;
146        err = OpenDriver("\p.MPP",&mpp);
147        if (err) {
148                Message("\pAppleTalk is not available");
149                return;
150        }
151        err = DoRegName();
152        Names();
153        BlockMove("\pEntering the network...",st,30L);
154        len = ourName[0];
155        BlockMove(&ourName[1], &st[st[0] + 1], (long) len);
156        st[0] += len;
157        err = DoDDP(st);
158        if (err)
159                Message("\pError writing to network.");
160        while (Working())
161                ;
162        BlockMove("\pLeaving the network...",st,30L);
163        len = ourName[0];
164        BlockMove(&ourName[1], &st[st[0] + 1], (long) len);
165        st[0] += len;
166        err = DoDDP(st);
167        CleanTalk();
168       
169}
170
Note: See TracBrowser for help on using the repository browser.