Ver Fonte

lib/presence: QSA carries subscription status
pa: set subscription status for internal subscriptions, using get_content_length
instead of strlen(body), corrected change flag settings
rls: accepts subscription status from QSA
presence_b2b: using get content length instead of strlen(body),
propagate subscription status through QSA

Vaclav Kubart há 19 anos atrás
pai
commit
6c9231d75f
3 ficheiros alterados com 20 adições e 5 exclusões
  1. 3 0
      lib/presence/ChangeLog
  2. 12 2
      lib/presence/notifier.h
  3. 5 3
      lib/presence/notifier_domain.c

+ 3 - 0
lib/presence/ChangeLog

@@ -1,3 +1,6 @@
+2006-03-21
+	* subscription status propagation through QSA
+
 2006-03-20
 	* extra information (record_id, package, ...) in QSA notificaltions
 	(client_notify_info_t) replaced by pointer to subscription [may be a bit

+ 12 - 2
lib/presence/notifier.h

@@ -63,6 +63,13 @@ void release_subscription(subscription_t *s);
  * to client. It must contain all information
  * for processing the status info. */
 
+typedef enum {
+	qsa_subscription_active,
+	qsa_subscription_pending,
+	qsa_subscription_terminated,
+	qsa_subscription_rejected
+} qsa_subscription_status_t;
+
 typedef struct {
 	/* replacement for record_id, package, ... it is much more efficient */
 	subscription_t *subscription; 
@@ -70,6 +77,7 @@ typedef struct {
 	void *data;
 	int data_len;
 	destroy_function_f destroy_func; /* function used to destroy data */
+	qsa_subscription_status_t status;
 } client_notify_info_t;
 
 
@@ -77,9 +85,11 @@ void free_client_notify_info_content(client_notify_info_t *info);
 
 /* notifications SHOULD be sent through this method */
 int notify_subscriber(subscription_t *s, 
+		notifier_t *n,
 		int data_type, 
-		void *data, int data_len, 
-		destroy_function_f data_destroy);
+		void *data, 
+		destroy_function_f data_destroy,
+		qsa_subscription_status_t status);
 
 #ifdef __cplusplus
 }

+ 5 - 3
lib/presence/notifier_domain.c

@@ -426,9 +426,11 @@ void unsubscribe(notifier_domain_t *domain, subscription_t *s)
 
 /* void notify_subscriber(subscription_t *s, mq_message_t *msg) */
 int notify_subscriber(subscription_t *s, 
+		notifier_t *n,
 		int data_type, 
-		void *data, int data_len, 
-		destroy_function_f data_destroy)
+		void *data, 
+		destroy_function_f data_destroy,
+		qsa_subscription_status_t status)
 {
 	int ok = 1;
 	int sent = 0;
@@ -455,7 +457,7 @@ int notify_subscriber(subscription_t *s,
 		info->subscription = s;
 		info->data_type = data_type;
 		info->data = data;
-		info->data_len = data_len;
+		info->status = status;
 		info->destroy_func = data_destroy;
 		
 		lock_subscription_data(s);