#ifndef INCLUDE_git_transport_h__
#define INCLUDE_git_transport_h__
#include "indexer.h"
#include "net.h"
#include "types.h"
GIT_BEGIN_DECL
typedef enum {
GIT_CERT_SSH_MD5 = (1 << 0),
GIT_CERT_SSH_SHA1 = (1 << 1),
} git_cert_ssh_t;
typedef struct {
git_cert_t cert_type;
git_cert_ssh_t type;
unsigned char hash_md5[16];
unsigned char hash_sha1[20];
} git_cert_hostkey;
typedef struct {
git_cert_t cert_type;
void *data;
size_t len;
} git_cert_x509;
typedef enum {
GIT_CREDTYPE_USERPASS_PLAINTEXT = (1u << 0),
GIT_CREDTYPE_SSH_KEY = (1u << 1),
GIT_CREDTYPE_SSH_CUSTOM = (1u << 2),
GIT_CREDTYPE_DEFAULT = (1u << 3),
GIT_CREDTYPE_SSH_INTERACTIVE = (1u << 4),
GIT_CREDTYPE_USERNAME = (1u << 5),
} git_credtype_t;
typedef struct git_cred git_cred;
struct git_cred {
git_credtype_t credtype;
void (*free)(git_cred *cred);
};
typedef struct {
git_cred parent;
char *username;
char *password;
} git_cred_userpass_plaintext;
#ifndef LIBSSH2_VERSION
typedef struct _LIBSSH2_SESSION LIBSSH2_SESSION;
typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT LIBSSH2_USERAUTH_KBDINT_PROMPT;
typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE LIBSSH2_USERAUTH_KBDINT_RESPONSE;
#endif
typedef int (*git_cred_sign_callback)(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len, const unsigned char *data, size_t data_len, void **abstract);
typedef void (*git_cred_ssh_interactive_callback)(const char* name, int name_len, const char* instruction, int instruction_len, int num_prompts, const LIBSSH2_USERAUTH_KBDINT_PROMPT* prompts, LIBSSH2_USERAUTH_KBDINT_RESPONSE* responses, void **abstract);
typedef struct git_cred_ssh_key {
git_cred parent;
char *username;
char *publickey;
char *privatekey;
char *passphrase;
} git_cred_ssh_key;
typedef struct git_cred_ssh_interactive {
git_cred parent;
char *username;
git_cred_ssh_interactive_callback prompt_callback;
void *payload;
} git_cred_ssh_interactive;
typedef struct git_cred_ssh_custom {
git_cred parent;
char *username;
char *publickey;
size_t publickey_len;
git_cred_sign_callback sign_callback;
void *payload;
} git_cred_ssh_custom;
typedef struct git_cred git_cred_default;
typedef struct git_cred_username {
git_cred parent;
char username[1];
} git_cred_username;
GIT_EXTERN(int) git_cred_has_username(git_cred *cred);
GIT_EXTERN(int) git_cred_userpass_plaintext_new(
git_cred **out,
const char *username,
const char *password);
GIT_EXTERN(int) git_cred_ssh_key_new(
git_cred **out,
const char *username,
const char *publickey,
const char *privatekey,
const char *passphrase);
GIT_EXTERN(int) git_cred_ssh_interactive_new(
git_cred **out,
const char *username,
git_cred_ssh_interactive_callback prompt_callback,
void *payload);
GIT_EXTERN(int) git_cred_ssh_key_from_agent(
git_cred **out,
const char *username);
GIT_EXTERN(int) git_cred_ssh_custom_new(
git_cred **out,
const char *username,
const char *publickey,
size_t publickey_len,
git_cred_sign_callback sign_callback,
void *payload);
GIT_EXTERN(int) git_cred_default_new(git_cred **out);
GIT_EXTERN(int) git_cred_username_new(git_cred **cred, const char *username);
typedef int (*git_cred_acquire_cb)(
git_cred **cred,
const char *url,
const char *username_from_url,
unsigned int allowed_types,
void *payload);
GIT_END_DECL
#endif