+ struct GNUNET_IDENTITY_Operation *op;
+ struct GNUNET_IDENTITY_RenameMessage *grm;
+ size_t slen_old;
+ size_t slen_new;
+ char *dst;
+
+ slen_old = strlen (old_name) + 1;
+ slen_new = strlen (new_name) + 1;
+ if ( (slen_old >= GNUNET_SERVER_MAX_MESSAGE_SIZE) ||
+ (slen_new >= GNUNET_SERVER_MAX_MESSAGE_SIZE) ||
+ (slen_old + slen_new >= GNUNET_SERVER_MAX_MESSAGE_SIZE - sizeof (struct GNUNET_IDENTITY_RenameMessage)) )
+ {
+ GNUNET_break (0);
+ return NULL;
+ }
+ op = GNUNET_malloc (sizeof (struct GNUNET_IDENTITY_Operation) +
+ sizeof (struct GNUNET_IDENTITY_RenameMessage) +
+ slen_old + slen_new);
+ op->h = id;
+ op->cont = cb;
+ op->cls = cb_cls;
+ grm = (struct GNUNET_IDENTITY_RenameMessage *) &op[1];
+ grm->header.type = htons (GNUNET_MESSAGE_TYPE_IDENTITY_RENAME);
+ grm->header.size = htons (sizeof (struct GNUNET_IDENTITY_RenameMessage) +
+ slen_old + slen_new);
+ grm->old_name_len = htons (slen_old);
+ grm->new_name_len = htons (slen_new);
+ dst = (char *) &grm[1];
+ memcpy (dst, old_name, slen_old);
+ memcpy (&dst[slen_old], new_name, slen_new);
+ op->msg = &grm->header;
+ GNUNET_CONTAINER_DLL_insert_tail (id->op_head,
+ id->op_tail,
+ op);
+ if (NULL == id->th)
+ transmit_next (id);
+ return op;