private void subscribe(Subscription subscription)
        {
            //can't be off but might be inactive: to check that we have to synchronize, we probably don't want to do that
            //we might want to introduce a method shouldSend to the RequestTutor, better relay on the batch algorithm to abort
            //useless requests

            log.Info("Preparing subscription: " + subscription.SubscriptionId);

            SubscribeRequest request = subscription.generateSubscribeRequest();

            log.Debug("Preparing subscription 2: " + request + ", " + subscription.getPhase() + ", " + sessionThread.SessionManager.SessionId + ", " + this.options);

            try
            {
                SubscribeTutor tutor = new SubscribeTutor(this, subscription.SubscriptionId, subscription.getPhase(), sessionThread, 0);

                log.Debug("Preparing subscription 3: " + tutor.session.SessionId);

                manager.sendSubscription(request, tutor);

                log.Debug("Preparing subscription 4.");
            }
            catch (Exception e)
            {
                log.Error("Something wrong in Subscription preparation: " + e.Message);
                log.Debug(e.StackTrace);
            }
        }
        private void resubscribe(Subscription subscription, long timeoutMs)
        {
            log.Info("Preparing to send subscription again: " + subscription.SubscriptionId);

            SubscribeRequest request = subscription.generateSubscribeRequest();

            SubscribeTutor tutor = new SubscribeTutor(this, subscription.SubscriptionId, subscription.getPhase(), sessionThread, timeoutMs);

            manager.sendSubscription(request, tutor);
        }