+ SilcNotifyType type;
+ SilcArgumentPayload args;
+ char message[4096];
+ char *msg;
+
+ type = silc_notify_get_type(notify_payload);
+ msg = silc_notify_get_message(notify_payload);
+ args = silc_notify_get_args(notify_payload);
+
+ memset(message, 0, sizeof(message));
+
+ /* Get arguments (defined by protocol in silc-pp-01 -draft) */
+ switch(type) {
+ case SILC_NOTIFY_TYPE_NONE:
+ strncat(message, msg, strlen(msg));
+ break;
+ case SILC_NOTIFY_TYPE_INVITE:
+ snprintf(message, sizeof(message), msg,
+ silc_argument_get_arg_type(args, 1, NULL),
+ silc_argument_get_arg_type(args, 2, NULL));
+ break;
+ case SILC_NOTIFY_TYPE_JOIN:
+ snprintf(message, sizeof(message), msg,
+ silc_argument_get_arg_type(args, 2, NULL),
+ silc_argument_get_arg_type(args, 3, NULL),
+ silc_argument_get_arg_type(args, 4, NULL),
+ silc_argument_get_arg_type(args, 6, NULL));
+ break;
+ case SILC_NOTIFY_TYPE_LEAVE:
+ snprintf(message, sizeof(message), msg,
+ silc_argument_get_arg_type(args, 1, NULL),
+ silc_argument_get_arg_type(args, 2, NULL),
+ silc_argument_get_arg_type(args, 4, NULL));
+ break;
+ case SILC_NOTIFY_TYPE_SIGNOFF:
+ snprintf(message, sizeof(message), msg,
+ silc_argument_get_arg_type(args, 1, NULL),
+ silc_argument_get_arg_type(args, 2, NULL));
+ break;
+ case SILC_NOTIFY_TYPE_TOPIC_SET:
+ snprintf(message, sizeof(message), msg,
+ silc_argument_get_arg_type(args, 3, NULL),
+ silc_argument_get_arg_type(args, 4, NULL),
+ silc_argument_get_arg_type(args, 2, NULL));
+ break;
+ default:
+ break;
+ }
+
+ silc_print(client, "*** %s", message);