⛏️ index : haiku.git

/*
 * Copyright 2004-2005, Waldemar Kornewald <wkornew@gmx.net>
 * Distributed under the terms of the MIT License.
 */

#include "PPPServer.h"
#include <Application.h>


PPPServer::PPPServer()
	: BHandler("PPPServer"),
	fListener(this)
{
	be_app->AddHandler(this);

	fListener.WatchManager();

	InitInterfaces();
}


PPPServer::~PPPServer()
{
	UninitInterfaces();

	fListener.StopWatchingManager();

	be_app->RemoveHandler(this);
}


void
PPPServer::MessageReceived(BMessage *message)
{
	switch(message->what) {
		case PPP_REPORT_MESSAGE:
			HandleReportMessage(message);
		break;

		default:
			BHandler::MessageReceived(message);
	}
}


void
PPPServer::InitInterfaces()
{
	// TODO: create one ConnectionRequestWindow per interface
}


void
PPPServer::UninitInterfaces()
{
	// TODO: delete all ConnectionRequestWindows
}


void
PPPServer::HandleReportMessage(BMessage *message)
{
	ppp_interface_id id;
	if (message->FindInt32("interface", reinterpret_cast<int32*>(&id)) != B_OK)
		return;

	int32 type, code;
	message->FindInt32("type", &type);
	message->FindInt32("code", &code);

	if (type == PPP_MANAGER_REPORT && code == PPP_REPORT_INTERFACE_CREATED)
		CreateConnectionRequestWindow(id);
}


void
PPPServer::CreateConnectionRequestWindow(ppp_interface_id id)
{
	// TODO: create window, register window as report receiver for the interface
	// XXX: if a window for that ID exists then only register it as report receiver
}