+ /* Attribute Exchange */
+ StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ns.ax="), 0);
+ StrBufUrlescAppend(RedirectUrl, NULL, "http://openid.net/srv/ax/1.0");
+
+ StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ax.mode=fetch_request"), 0);
+
+ StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ax.required=firstname,lastname,friendly,nickname"), 0);
+
+ StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ax.type.firstname="), 0);
+ StrBufUrlescAppend(RedirectUrl, NULL, "http://axschema.org/namePerson/first");
+
+ StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ax.type.lastname="), 0);
+ StrBufUrlescAppend(RedirectUrl, NULL, "http://axschema.org/namePerson/last");
+
+ StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ax.type.friendly="), 0);
+ StrBufUrlescAppend(RedirectUrl, NULL, "http://axschema.org/namePerson/friendly");
+
+ StrBufAppendBufPlain(RedirectUrl, HKEY("&openid.ax.type.nickname="), 0);
+ StrBufUrlescAppend(RedirectUrl, NULL, "http://axschema.org/namePerson/nickname");
+
+ /* return_to completes the round trip */