Exemplo n.º 1
0
 public ForwardingLayer(Machine machine) {
   m_transport = machine.Transport;
   m_topology = machine.Topology;
   m_flm = machine.Interface_flm;
   m_ReloadConfig = machine.ReloadConfig;
 }
Exemplo n.º 2
0
 public TopologyPlugin(Machine machine) {
     m_id = machine.ReloadConfig.LocalNodeID;
     m_transport = machine.Transport;
     m_DispatcherQueue = machine.ReloadConfig.DispatcherQueue;
     m_ReloadConfig = machine.ReloadConfig;
     storage = new StorageModul(m_ReloadConfig);
 }
Exemplo n.º 3
0
            public RoutingTable(Node local_node, Machine machine) {
                m_ReloadConfig = machine.ReloadConfig;
                m_flm = machine.Interface_flm;
                m_DispatcherQueue = machine.ReloadConfig.DispatcherQueue;
                m_transport = machine.Transport;
                m_local_node = local_node;
                m_successors = new List<NodeId>();
                m_predecessors = new List<NodeId>();
                m_fingerSuccessors = new List<NodeId>();

                for (int i = 0; i < 128; i++)
                    m_FingerTable.Add(new FTableEntry()
                    {
                        Finger = new ResourceId(local_node.Id + ReloadGlobals.BigIntPow2Array[i]),
                        dtLastSuccessfullFinger = DateTime.MinValue,
                        nodestate = NodeState.unknown
                    });

                /* 
                   A peer MUST NOT enter
                   itself in its successor or predecessor table and instead should leave
                   the entries empty.
                 */
            }
Exemplo n.º 4
0
 public void AppProcedure(MessageTransport transport,
   List<FetchKindResponse> kindRes) {
   /* Acutally, the ACL has no appprocedure */
   return;
 }
Exemplo n.º 5
0
 /// <summary>
 /// Inits the Usage Manager.
 /// </summary>
 /// <param name="machine">The state machine for RELOAD overlay.</param>
 public void Init(Machine machine) {
   localNode = machine.Topology.LocalNode;
   m_Transport = machine.Transport;
   m_ReloadConfig = machine.ReloadConfig;
   m_DispatcherQueue = machine.ReloadConfig.DispatcherQueue;
   usages = new Dictionary<Usage_Code_Point, IUsage>();
   m_ArrayManager = new ArrayManager();
 }
Exemplo n.º 6
0
 public void AppProcedure(MessageTransport transport,
   List<FetchKindResponse> kindResponse) {
   throw new NotImplementedException();
 }
Exemplo n.º 7
0
    public void AppProcedure(MessageTransport transport,
      List<FetchKindResponse> kindRes) {

      UInt32 aclKindId = new AccessList(myManager).KindId;

      var responses = new List<FetchKindResponse>();
      responses.AddRange(kindRes);
      var disCoList = new List<DisCoRegistration>();
      var aclList = new List<AccessList>();
      /* Extract all stored data for this usage */
      var rmIndice = new List<int>();
      foreach (FetchKindResponse fkr in responses) {
        if (fkr.kind == aclKindId) {
          foreach (StoredData sd in fkr.values)
            aclList.Add((AccessList)sd.Value.GetUsageValue);
          kindRes.Remove(fkr);
        }
        if (fkr.kind == KindId) {
          foreach (StoredData sd in fkr.values)
            disCoList.Add((DisCoRegistration)sd.Value.GetUsageValue);
          kindRes.Remove(fkr);
        }
      }

      /* begin AppProcedure */

      // TODO validation of DisCo-Regs with ACL
      /* Choose topologically closest focus */
      if (disCoList.Count > 0) {
        /* MOK for demo */
        //var coordinates = new List<int>();        
        foreach (DisCoRegistration dr in disCoList) {
          int remoteCoords = int.Parse(dr.Data.Coordinate);
          NodeId focusId = dr.data.node_id;
          if (remoteCoords == myManager.m_ReloadConfig.MyCoordinate) {
            myManager.m_ReloadConfig.MyFocus = focusId;
            Arbiter.Activate(myManager.m_DispatcherQueue,
                new IterativeTask<Destination>(new Destination(focusId),
                    transport.AppAttachProcedure));
          }
          else {
            myManager.m_ReloadConfig.Logger(ReloadGlobals.TRACEFLAGS.T_WARNING,
              "Focus not in my coords");
          }
        }
      }
    }
Exemplo n.º 8
0
    public void AppProcedure(FetchKindResponse kindRes, MessageTransport transport) {
      myManager.m_ReloadConfig.Logger(ReloadGlobals.TRACEFLAGS.T_ERROR, "AppProcedure: ");

      List<RedirServiceProviderData> ProviderList = new List<RedirServiceProviderData>();
      List<StoredData> storedDatas = kindRes.values;
      RedirServiceProvider provider = null;
      foreach (StoredData storedData in storedDatas) {
        IUsage usage = storedData.Value.GetUsageValue;

        provider = (RedirServiceProvider)usage;
        ProviderList.Add(provider.Data);
        myManager.m_ReloadConfig.Logger(ReloadGlobals.TRACEFLAGS.T_ERROR, "AppProcedure: " + provider.Report());
      }

      //if (myManager != null && myManager.m_ReloadConfig.callback != null && provider != null)
      //    myManager.m_ReloadConfig.callback(new ResourceId(provider.ResourceName), ProviderList);    //TODO: provider.ResourceName MUST (should) be the same for all providers in ProviderList
    }
Exemplo n.º 9
0
 public void AppProcedure(MessageTransport transport, List<FetchKindResponse> kindRes)   // TODO: new AppProcedure
 {
   //throw new ArgumentException(String.Format("TODO: new AppProcedure"));
   kindRes.Clear();
   //foreach (FetchKindResponse fkr in kindRes)
   //kindRes.Remove(fkr);
 }
Exemplo n.º 10
0
    public void AppProcedure(MessageTransport transport,
      List<FetchKindResponse> fetchKindResponses) {
      /* Select KindResponse returned for this usage */
      FetchKindResponse sip = null;
      var responses = new List<FetchKindResponse>();
      responses.AddRange(fetchKindResponses);      
      foreach (FetchKindResponse fkr in responses ) {
        if (fkr.kind == KindId) {
          sip = fkr;
          fetchKindResponses.Remove(fkr);
        }
      }    

      List<StoredData> storedDatas = sip.values;
      foreach (StoredData storedData in storedDatas) {
        IUsage usage = storedData.Value.GetUsageValue;

        SipRegistration sr = (SipRegistration)usage;
        switch (sr.Type) {
          case SipRegistrationType.sip_registration_uri:
            var keys = new List<string>();
            keys.Add(storedData.Value.dictionary_entry.key);
            StoredDataSpecifier specifier = myManager.createSpecifier(
                sr.KindId, sr.Data.sip_uri);
            var specifiers = new List<StoredDataSpecifier>();
            specifiers.Add(specifier);
            Arbiter.Activate(myManager.m_DispatcherQueue,
                new IterativeTask<string, List<StoredDataSpecifier>>(
                    sr.Data.sip_uri, specifiers, transport.Fetch));
            break;

          case SipRegistrationType.sip_registration_route:  //-- joscha TODO: keep this change local
            //Arbiter.Activate(myManager.m_DispatcherQueue,
            //    new IterativeTask<Destination>(sr.Data.destination_list[0],
            //        transport.AppAttachProcedure));
            break;
        }
      }
    }
Exemplo n.º 11
0
	public void AppProcedure(MessageTransport transport, List<FetchKindResponse> fetchKindResponses)
	{
#if MAKE_IMAGE_STORE_APPATTACH // Make AppAttach

		FetchKindResponse fetchResponse = null;

		// Pick up a fetch response with the own kind id
		var _fetchKindResponses = new List<FetchKindResponse>(fetchKindResponses); // copy of fetchKindResponses
		foreach (FetchKindResponse fetchKindResponse in _fetchKindResponses)
		{
			if (fetchResponse.kind == this.KindId)
			{
				fetchResponse = fetchKindResponse;
				break;
			}
		}

		// Release all fetch responses
		fetchKindResponses.Clear();

		if (fetchResponse == null)
			return;

		// Make an AppAttach request for every attached usage
		var storedDatas = fetchResponse.values;
		foreach (StoredData storedData in storedDatas)
		{
			ImageStoreUsage usage = (ImageStoreUsage)storedData.Value.GetUsageValue;

			Arbiter.Activate(UsageManager.m_DispatcherQueue,
				new IterativeTask<Destination>(
					new Destination(usage.Data.NodeId),
				transport.AppAttachProcedure));
		}

#else // Don't make AppAttach

		fetchKindResponses.Clear();

#endif
	}
Exemplo n.º 12
0
    public bool Init() {

      try {
        if (ReloadGlobals.IgnoreSSLErrors)
          IgnoreSSLErrors();

        m_transport = new MessageTransport();

        if (ReloadGlobals.TLS)
          m_interface_flm = new ReloadFLM(ReloadConfig);
        else
          m_interface_flm = new SimpleFLM(ReloadConfig);

        ReloadConfig.Statistics.SetParams(m_interface_flm);
        m_interface_flm.ReloadFLMEventHandler += 
          new ReloadFLMEvent(m_transport.rfm_ReloadFLMEventHandler);

        ReloadConfig.State = ReloadConfig.RELOAD_State.Init;
        stateUpdates(ReloadConfig.RELOAD_State.Init);

        ReloadConfigResolve resolve = new ReloadConfigResolve(ReloadConfig);

        resolve.ReadConfig();
        if (ReloadGlobals.TLS)
          resolve.EnrollmentProcedure();
        else
          resolve.SimpleNodeIdRequest();

        m_interface_flm.Init();
        m_ReloadConfig.AccessController = new AccessController(m_ReloadConfig);
        m_topology = new TopologyPlugin(this);
        if (!m_topology.Init(this))
          return false;

        m_forwarding = new ForwardingLayer(this);
        m_transport.Init(this);

        //ReloadConfig.State = ReloadConfig.RELOAD_State.Configured;
        //stateUpdates(ReloadConfig.RELOAD_State.Configured);
        BootStrapConfig();

        m_ReloadConfig.StartJoining = DateTime.Now;
        if (m_ReloadConfig.IamClient)
          m_ReloadConfig.StartJoinMobile = DateTime2.Now;
        if (!ReloadConfig.IsBootstrap)
          Arbiter.Activate(ReloadConfig.DispatcherQueue, 
            new IterativeTask<List<BootstrapServer>>(m_BootstrapServerList,
            m_transport.PreJoinProdecure));

//        m_worker_thread.ReportProgress(100); --joscha
        InitUsageManager();
        ReloadConfig.State = ReloadConfig.RELOAD_State.Configured;
        stateUpdates(ReloadConfig.RELOAD_State.Configured);

        /* reporting service */
        Arbiter.Activate(ReloadConfig.DispatcherQueue, new IterativeTask(Reporting));
        /* chord-ping-interval */
        Arbiter.Activate(ReloadConfig.DispatcherQueue, new IterativeTask(Maintenance));
        /* chord-update-interval */
        Arbiter.Activate(ReloadConfig.DispatcherQueue, new IterativeTask(UpdateCycle));
        Arbiter.Activate(ReloadConfig.DispatcherQueue, new IterativeTask(CommandCheckTask));
      }
      catch (Exception ex) {
        ReloadConfig.Logger(ReloadGlobals.TRACEFLAGS.T_ERROR, "Init: " + ex.Message);
      }
      return true;
    }