+ if (already_running) {
+ unsigned char *request, *response;
+ int reqlen, alglen, clen, keybloblen, resplen;
+debug(("ooh %d\n", __LINE__));
+ alglen = strlen(skey->alg->name);
+debug(("ooh %d\n", __LINE__));
+ clen = strlen(skey->comment);
+debug(("ooh %d\n", __LINE__));
+
+debug(("ooh %d\n", __LINE__));
+ keybloblen = skey->alg->openssh_fmtkey(skey->data, NULL, 0);
+debug(("ooh %d\n", __LINE__));
+
+debug(("ooh %d\n", __LINE__));
+ reqlen = 4 + 1 + /* length, message type */
+ 4 + alglen + /* algorithm name */
+ keybloblen + /* key data */
+ 4 + clen /* comment */
+ ;
+debug(("ooh %d\n", __LINE__));
+
+debug(("ooh %d\n", __LINE__));
+ request = smalloc(reqlen);
+debug(("ooh %d\n", __LINE__));
+
+ request[4] = SSH2_AGENTC_ADD_IDENTITY;
+debug(("ooh %d\n", __LINE__));
+ reqlen = 5;
+debug(("ooh %d\n", __LINE__));
+ PUT_32BIT(request+reqlen, alglen);
+debug(("ooh %d\n", __LINE__));
+ reqlen += 4;
+debug(("ooh %d\n", __LINE__));
+ memcpy(request+reqlen, skey->alg->name, alglen);
+debug(("ooh %d\n", __LINE__));
+ reqlen += alglen;
+debug(("ooh %d\n", __LINE__));
+ reqlen += skey->alg->openssh_fmtkey(skey->data,
+ request+reqlen, keybloblen);
+debug(("ooh %d\n", __LINE__));
+ PUT_32BIT(request+reqlen, clen);
+debug(("ooh %d\n", __LINE__));
+ memcpy(request+reqlen+4, skey->comment, clen);
+debug(("ooh %d\n", __LINE__));
+ PUT_32BIT(request, reqlen-4);
+debug(("ooh %d\n", __LINE__));
+ reqlen += clen+4;
+
+ agent_query(request, reqlen, &response, &resplen);
+debug(("ooh %d\n", __LINE__));
+ if (resplen < 5 || response[4] != SSH_AGENT_SUCCESS)
+ MessageBox(NULL, "The already running Pageant"
+ "refused to add the key.", APPNAME,
+ MB_OK | MB_ICONERROR);
+debug(("ooh %d\n", __LINE__));
+ } else {
+ if (add234(ssh2keys, skey) != skey) {
+ skey->alg->freekey(skey->data);
+ sfree(skey); /* already present, don't waste RAM */
+ }