Esempio n. 1
0
main()
{
	int i;
	assoctab_t *pt[NTABS];

	for (i=0;i<NTABS;i++) {
		pt[i] = assoctab_create(sizeof(int));
		if (!pt[i]) {
			printf("create: test failed\n");
			exit(1);
		}
		if (assoctab_subscript(pt[i], 1) != NULL) {
			printf("subcript1: test failed\n");
			exit(1);
		}
	}
	for (i=0;i<NTABS;i++) {
		int h;
		h = _heapchk();
		if (h != _HEAPOK) {
			printf("heapchk: test failed\n");
			exit(1);
		}
		test1(pt[i], 1);
		test1(pt[i], 2);
		test1(pt[i], 3);
	}
	for (i=0;i<NTABS;i++) 
		assoctab_destroy(pt[i]);
	printf("test okay\n");
	return 0;
}
Esempio n. 2
0
/*--------------------------------------------------------------------------
 Create a pv_t.
--------------------------------------------------------------------------*/
pv_t *pv_create(struct dp_s *dp)
{
	pv_t *pv;

	pv = (pv_t *)dp_MALLOC(sizeof(pv_t));
	if (!pv) return NULL;
	memset(pv, 0, sizeof(pv_t));

	pv->peers = assoctab_create(sizeof(pv_peer_t));

	if (!pv->peers) {
		assoctab_destroy(pv->peers);
		dp_FREE(pv);
		return NULL;
	}

	pv->next_send = dp->now;
	pv->cur_key_index = -1;
	pv->cur_ndests = 0;
	pv->new_ndests = 0;
	pv->cur_nkeys = 0;
	pv->cur_offset = 0;

	pv->dp = dp;
	return pv;
}
Esempio n. 3
0
/*------------------------------------------------------------------------
 Create an instance of the sbdserv module, listening on port for new
 connections.
------------------------------------------------------------------------*/
sbdserv_t *sbdserv_create(unsigned short port)
{
	clock_t now = eclock();
	sbdserv_t *sbdserv;
	struct protoent *pe;
	struct sockaddr_in addr;
	int sockin;
	int flags;

	DPRINT(("sbdserv_create: creating my socket\n"));
	pe = getprotobyname("tcp");
	if (!pe) {
		DPRINT(("sbdserv_create: unknown protocol:TCP\n"));
		return NULL;
	}
	if ((sockin = socket(AF_INET, SOCK_STREAM, pe->p_proto)) == -1) {
		DPRINT(("sbdserv_create: socket error:%d\n", errno));
		return NULL;
	}
	flags = fcntl(sockin, F_GETFL, 0);
	if ((-1 == flags)
	||  (-1 == fcntl(sockin, F_SETFL, (flags | O_NONBLOCK)))) {
		DPRINT(("sbdserv_create: fcntl(sock:%d) error:%d\n", sockin, errno));
		return NULL;
	}

	DPRINT(("sbdserv_create: binding socket:%d\n", sockin));
	memset(&addr, 0, sizeof(addr));
	addr.sin_family = AF_INET; 
	addr.sin_port = htons(port); 
	addr.sin_addr.s_addr = htons(INADDR_ANY); 
	if (bind(sockin, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
		DPRINT(("sbdserv_create: bind error:%d\n", errno));
		return NULL;
	}

	DPRINT(("sbdserv_create: starting listen\n"));
	if (listen(sockin, 10) < 0) {
		DPRINT(("sbdserv_create: listen error:%d\n", errno));
		return NULL;
	}

	sbdserv = (sbdserv_t *)malloc(sizeof(sbdserv_t));
	if (!sbdserv)
		return NULL;
	sbdserv->conns = assoctab_create(sizeof(sbdserv_conn_t));
	if (!sbdserv->conns) {
		free(sbdserv);
		return NULL;
	}
	FD_ZERO(&sbdserv->fds);
	sbdserv->sockin = sockin;
	sbdserv->sockmax = sbdserv->sockin;
	sbdserv->cursock = 0;
	sbdserv->nsocks = 0;
	sbdserv->t_last_poll = now;
	return sbdserv;
}
Esempio n. 4
0
/*--------------------------------------------------------------------------
 Add a particular player to the table.
--------------------------------------------------------------------------*/
static pv_peer_t *pv_addPlayer(pv_t *pv, int player)
{
	/* No peer yet.  Create one. */
	pv_peer_t *peer = (pv_peer_t *)assoctab_subscript_grow(pv->peers, player);
	if (!peer) {
		DPRINT(("pv_addPlayer(%d): can't grow peers!\n", player));
		return NULL;
	}
	if (peer->vars) return peer;
	peer->vars = assoctab_create(sizeof(pv_var_t));
	peer->incoming.key = dp_PLAYERDATA_KEY_NONE;
	peer->allocated = dpio_MAXLEN_RELIABLE;
	peer->incoming.buf = dp_MALLOC(peer->allocated);
	if (!peer->incoming.buf) return NULL;	/* bug */
	DPRINT(("pv_addPlayer: created variable table for player %d\n", player));
	return peer;
}
Esempio n. 5
0
/*------------------------------------------------------------------------
 Create an instance of the bhttp module, listening on port for new
 connections.
------------------------------------------------------------------------*/
bhttp_t *bhttp_create(unsigned short port, bhttp_url2buf_t url2buf_cb, void *url2buf_context)
{
	clock_t now = eclock();
	bhttp_t *bhttp;
	struct protoent *pe;
	struct sockaddr_in addr;
	int sockin;
	int flags;

	if (!url2buf_cb)
		return NULL;
	DPRINT(("bhttp_create: creating my socket\n"));
	pe = getprotobyname("tcp");
	if (!pe) {
		DPRINT(("bhttp_create: unknown protocol:TCP\n"));
		return NULL;
	}
	if ((sockin = socket(AF_INET, SOCK_STREAM, pe->p_proto)) == -1) {
		DPRINT(("bhttp_create: socket error:%d\n", errno));
		return NULL;
	}
	flags = fcntl(sockin, F_GETFL, 0);
	if ((-1 == flags)
	||  (-1 == fcntl(sockin, F_SETFL, (flags | O_NONBLOCK)))) {
		DPRINT(("bhttp_create: fcntl(sock:%d) error:%d\n", sockin, errno));
		return NULL;
	}

	DPRINT(("bhttp_create: binding socket:%d\n", sockin));
	memset(&addr, 0, sizeof(addr));
	addr.sin_family = AF_INET;
	addr.sin_port = htons(port);
	addr.sin_addr.s_addr = htons(INADDR_ANY);
	if (bind(sockin, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
		DPRINT(("bhttp_create: bind error:%d\n", errno));
		return NULL;
	}

	DPRINT(("bhttp_create: starting listen\n"));
	if (listen(sockin, 10) < 0) {
		DPRINT(("bhttp_create: listen error:%d\n", errno));
		return NULL;
	}

	bhttp = (bhttp_t *)malloc(sizeof(bhttp_t));
	if (!bhttp)
		return NULL;
	bhttp->conns = assoctab_create(sizeof(bhttp_conn_t));
	if (!bhttp->conns) {
		free(bhttp);
		return NULL;
	}
	FD_ZERO(&bhttp->rfds);
	FD_ZERO(&bhttp->wfds);
	bhttp->sockin = sockin;
	bhttp->sockmax = bhttp->sockin;
	bhttp->cursock = 0;
	bhttp->nsocks = 0;
	bhttp->t_last_poll = now;
	bhttp->url2buf_cb = url2buf_cb;
	bhttp->url2buf_context = url2buf_context;
	return bhttp;
}
Esempio n. 6
0
int
commInit(
	commInitReq_t *		req,		// Request (or NULL)
	commInitResp_t *	resp)		// Response (or NULL)
{
	commInitReq_t		reqDummy;
	commInitResp_t		respDummy;
	ip_adr_t adr_broadcast;
	ip_adr_t *padr;
	OSStatus			err;
	extern Str255	gSavedSelection;
//	DebugStr ( "\pcommInit()" );
	DPRINT(("@TRUMP commInit(): "));

	if (req == NULL)
		req = (commInitReq_t *)memset(&reqDummy, 0, sizeof(*req));
	if (resp == NULL)
		resp = &respDummy;

	scratch_flat = malloc(MAX_RAW_PKTLEN);
	//scratch_flat = my_dos_malloc(MAX_RAW_PKTLEN, &scratch_seg, &scratch_off, &scratch_selector);
	if (!scratch_flat) {
		DPRINT(("commInit: couldn't allocate DOS memory!\n"));
		resp->status = comm_STATUS_BAD;
		return FALSE;
	}

	//	check for the existanct of OpenTransport
	if(!OpenTransportExists() || !OpenTransportInetExists()) {
		//DebugStr("\pOpen Transport Does Not Exist");
		DPRINT(("commInit: UDP ABI not found\n"));
		resp->status = comm_STATUS_NETWORK_NOT_PRESENT;
		free(scratch_flat);
		return FALSE;
	}

	//	Initialize OpenTransport
	err = InitOpenTransport();
	if (err != noErr) {
		resp->status = comm_STATUS_BAD;
		free(scratch_flat);
		return FALSE;
	}

	//	initialize Internet Services

	gInetService = OTOpenInternetServices(kDefaultInternetServicesPath, 0, &err);
	if (err != noErr) {
		resp->status = comm_STATUS_BAD;
		free(scratch_flat);
		return FALSE;
	}

	//	open an endpoint for sending and recieving data

	err = CreateAndConfigUDP(&gUDPEndpoint);
	if (err != noErr) {
		resp->status = comm_STATUS_BAD;
		free(scratch_flat);

		ShutDownUDP();

		return FALSE;
	}

	//	create the peer table

	peertab = assoctab_create(sizeof(ip_adr_t));
	if (!peertab) {
		// ABORT! Out of Memory
		resp->status = comm_STATUS_BAD;
		free(scratch_flat);

		ShutDownUDP();

		return FALSE;
	}

	//	Get information about the Internet

	err = OTInetGetInterfaceInfo(&gInetInfo, kDefaultInetInterface);
	if (err != noErr) {
		//DebugStr("\pCannot Get Information About Default Interface");
		resp->status = comm_STATUS_BAD;
		free(scratch_flat);

		ShutDownUDP();

		return FALSE;
	}

	// Store our address in the peer table under the bogus ME handle
	padr = (ip_adr_t *)assoctab_subscript_grow(peertab, trump_HDL_ME);
	if (!padr) {
		DPRINT(("commInit: couldn't grow peer table\n"));
		resp->status = comm_STATUS_BAD;
		free(scratch_flat);
		assoctab_destroy(peertab);

		ShutDownUDP();

		return FALSE;
	}
	dprint_peertab(peertab);
	DPRINT(("commInit: saving handle %d adr %x at %p\n", trump_HDL_ME, gInetInfo.fAddress, padr));
	memcpy(padr, &gInetInfo.fAddress, sizeof(ip_adr_t));
	dprint_peertab(peertab);

	// Open a handle good for receiving packets on the standard port
	// SRC = (*,*)
	// DEST = (localhost, pt->port)
	adr_broadcast = 0xffffffff;
	hdl_rx = trump_adr2hdl(adr_broadcast, SOCKET_MW2, SOCKET_MW2, TRUE);
	if (hdl_rx == trump_HDL_NONE) {
		DPRINT(("commInit: couldn't open handle for listening\n"));
		resp->status = comm_STATUS_BUSY;
		free(scratch_flat);
		assoctab_destroy(peertab);

		ShutDownUDP();

		return FALSE;
	}
	/*
	if ((req->flags & comm_INIT_FLAGS_RESUME) == 0) {
		if (!DoHostListDialog()) {
			resp->status = comm_STATUS_EMPTY;
			free(scratch_flat);
			assoctab_destroy(peertab);

			ShutDownUDP();

			return FALSE;
		}
	} else {

		//	we need to load the last string selected when we are resuming

		OpenPrefsFile();
		p2cstr(gSavedSelection);		//	the apps like C-strings
		ClosePrefsFile();

	}
	*/
	//	initialize our address list to nothing

	InitAddressList();

	//	add our own address to the beginning of the list (it MUST Be the first
	//	address in our list - we broadcast to all _other_ addresses in our list)

	AddAddressToList(gInetInfo.fAddress);

	//	add the address from the dialog to our broadcast list if the user chose one

	if (gSavedSelection[0] != 0) {
		InetHostInfo	theHostInfo;

		OTSetSynchronous(gInetService);
		err = OTInetStringToAddress(gInetService, gSavedSelection, &theHostInfo);
		OTSetAsynchronous(gInetService);

		if (err == noErr) {
			AddAddressToList(theHostInfo.addrs[0]);
		}
	}

	resp->status = comm_STATUS_OK;
	DPRINT(("commInit: success\n"));
	return TRUE;
}