singrdk/base/Applications/Network/CommandLib/NetworkCommands.cs

143 lines
4.2 KiB
C#
Raw Normal View History

2008-03-05 09:52:00 -05:00
///////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// File: IpCommands.cs
//
// Note: Minimal Network Adapter Configuration Tool
//
using System;
using System.Diagnostics;
using System.Net.IP;
using Microsoft.SingSharp;
using Microsoft.Singularity;
using Microsoft.Singularity.Channels;
using Microsoft.Singularity.Directory;
using NetStack.Contracts;
using NetStack.Channels.Public;
namespace Microsoft.Singularity.Applications.Network
{
public class Utils
{
public static bool ConnectEndPoint(string! lookupName, [Claims] ServiceContract.Exp! ep)
{
DirectoryServiceContract.Imp epNS = DirectoryService.NewClientEndpoint();
try
{
ErrorCode errorOut;
bool ok = SdsUtils.Bind(lookupName, epNS, ep, out errorOut);
if (!ok) {
return false;
}
else {
return true;
}
/*
epNS.SendBind(Microsoft.Singularity.Bitter.FromString2(lookupName), ep);
switch receive
{
case epNS.NakBind(ServiceContract.Exp:Start rejectedEP, error) :
// failure
delete rejectedEP;
return false;
break;
case epNS.AckBind() :
// success
return true;
break;
case epNS.ChannelClosed() :
// failure
return false;
}
*/
}
finally
{
delete epNS;
}
}
public static TcpConnectionContract.Imp:ReadyState GetNewTcpEndPoint()
{
TcpContract.Imp! tcpImp;
TcpContract.Exp! tcpExp;
TcpContract.NewChannel(out tcpImp, out tcpExp);
if (ConnectEndPoint(TcpContract.ModuleName, tcpExp))
{
tcpImp.RecvReady();
TcpConnectionContract.Imp! connImp;
TcpConnectionContract.Exp! connExp;
TcpConnectionContract.NewChannel(out connImp, out connExp);
tcpImp.SendCreateTcpSession(connExp);
connImp.RecvReady();
delete tcpImp;
return connImp;
}
else
{
delete tcpImp;
return null;
}
}
public static UdpConnectionContract.Imp:ReadyState GetNewUdpEndPoint()
{
UdpContract.Imp! udpImp;
UdpContract.Exp! udpExp;
UdpContract.NewChannel(out udpImp, out udpExp);
if (ConnectEndPoint(UdpContract.ModuleName, udpExp))
{
udpImp.RecvReady();
UdpConnectionContract.Imp! connImp;
UdpConnectionContract.Exp! connExp;
UdpConnectionContract.NewChannel(out connImp, out connExp);
udpImp.SendCreateUdpSession(connExp);
connImp.RecvReady();
delete udpImp;
return connImp;
}
else
{
delete udpImp;
return null;
}
}
public static void DNSShow(DNSContract.Imp:ReadyState! dnsConn)
{
string[] prefix = { "Primary", "Secondary" };
int key = 0;
IPv4[] servers = DNSImpConnection.GetNameServers(dnsConn);
foreach (IPv4 nameserver in servers)
{
Console.WriteLine(" {0} name server {1}",
prefix[key], nameserver);
key = 1;
}
if (key == 0)
{
Console.WriteLine("No DNS servers configured.");
}
}
}
}