meow-7.2.2
Tofu Linden 2010-06-25 19:06:24 +01:00
commit daabe1fb13
8 changed files with 50 additions and 88 deletions

View File

@ -456,101 +456,53 @@ static void get_random_bytes(void *buf, int nbytes)
}
#if LL_WINDOWS
// Code copied from http://msdn.microsoft.com/en-us/library/aa365939(VS.85).aspx
// This code grabs the first hardware address, rather than the first interface.
// Using a VPN can cause the first returned interface to be changed.
const S32 MAC_ADDRESS_BYTES=6;
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, * PASTAT;
// static
S32 LLUUID::getNodeID(unsigned char *node_id)
{
ASTAT Adapter;
NCB Ncb;
UCHAR uRetCode;
LANA_ENUM lenum;
int i;
int retval = 0;
// Declare and initialize variables.
DWORD dwSize = 0;
DWORD dwRetVal = 0;
int i;
memset( &Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBENUM;
Ncb.ncb_buffer = (UCHAR *)&lenum;
Ncb.ncb_length = sizeof(lenum);
uRetCode = Netbios( &Ncb );
/* variables used for GetIfTable and GetIfEntry */
MIB_IFTABLE *pIfTable;
MIB_IFROW *pIfRow;
// Allocate memory for our pointers.
pIfTable = (MIB_IFTABLE *) malloc(sizeof (MIB_IFTABLE));
if (pIfTable == NULL)
for(i=0; i < lenum.length ;i++)
{
printf("Error allocating memory needed to call GetIfTable\n");
return 0;
}
memset( &Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = lenum.lana[i];
// Before calling GetIfEntry, we call GetIfTable to make
// sure there are entries to get and retrieve the interface index.
uRetCode = Netbios( &Ncb );
// Make an initial call to GetIfTable to get the
// necessary size into dwSize
if (GetIfTable(pIfTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
free(pIfTable);
pIfTable = (MIB_IFTABLE *) malloc(dwSize);
if (pIfTable == NULL)
{
printf("Error allocating memory\n");
return 0;
}
}
// Make a second call to GetIfTable to get the actual
// data we want.
if ((dwRetVal = GetIfTable(pIfTable, &dwSize, 0)) == NO_ERROR)
{
if (pIfTable->dwNumEntries > 0)
memset( &Ncb, 0, sizeof (Ncb) );
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = lenum.lana[i];
strcpy( (char *)Ncb.ncb_callname, "* " ); /* Flawfinder: ignore */
Ncb.ncb_buffer = (unsigned char *)&Adapter;
Ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios( &Ncb );
if ( uRetCode == 0 )
{
pIfRow = (MIB_IFROW *) malloc(sizeof (MIB_IFROW));
if (pIfRow == NULL)
{
printf("Error allocating memory\n");
if (pIfTable != NULL)
{
free(pIfTable);
pIfTable = NULL;
}
return 0;
}
int limit = MAC_ADDRESS_BYTES;
memcpy(node_id, "\0\0\0\0\0\0", limit); // zero out array of bytes
for (i = 0; i < (int) pIfTable->dwNumEntries; i++)
{
pIfRow->dwIndex = pIfTable->table[i].dwIndex;
if ((dwRetVal = GetIfEntry(pIfRow)) == NO_ERROR)
{
switch (pIfRow->dwType)
{
case IF_TYPE_ETHERNET_CSMACD:
case IF_TYPE_IEEE80211:
limit = min((int) pIfRow->dwPhysAddrLen, limit);
if (pIfRow->dwPhysAddrLen == 0)
break;
memcpy(node_id, (UCHAR *)&pIfRow->bPhysAddr[0], limit); // just incase the PhysAddr is not the expected MAC_Address size
free(pIfTable);
return 1; //return first hardware device found.
break;
case IF_TYPE_OTHER:
case IF_TYPE_PPP:
case IF_TYPE_SOFTWARE_LOOPBACK:
case IF_TYPE_ISO88025_TOKENRING:
case IF_TYPE_IEEE1394:
case IF_TYPE_ATM:
case IF_TYPE_TUNNEL:
default:
break;
}
}
}
memcpy(node_id,Adapter.adapt.adapter_address,6); /* Flawfinder: ignore */
retval = 1;
}
}
free(pIfTable);
return 0;
return retval;
}
#elif LL_DARWIN

View File

@ -82,6 +82,7 @@ public:
void init();
void cleanup();
void setAvatarObject(LLVOAvatarSelf* avatar);
bool isInitialized() { return mInitialized; }
private:
bool mInitialized;

View File

@ -168,7 +168,9 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia
char hashed_mac_string[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */
LLMD5 hashed_mac;
unsigned char MACAddress[MAC_ADDRESS_BYTES];
LLUUID::getNodeID(MACAddress);
if(LLUUID::getNodeID(MACAddress) == 0) {
llerrs << "Failed to get node id; cannot uniquely identify this machine." << llendl;
}
hashed_mac.update( MACAddress, MAC_ADDRESS_BYTES );
hashed_mac.finalize();
hashed_mac.hex_digest(hashed_mac_string);

View File

@ -763,7 +763,7 @@ void LLViewerMedia::updateMedia(void *dummy_arg)
}
// Sort the static instance list using our interest criteria
std::stable_sort(sViewerMediaImplList.begin(), sViewerMediaImplList.end(), priorityComparitor);
sViewerMediaImplList.sort(priorityComparitor);
// Go through the list again and adjust according to priority.
iter = sViewerMediaImplList.begin();

View File

@ -84,7 +84,7 @@ public:
static const char* SHOW_MEDIA_WITHIN_PARCEL_SETTING;
static const char* SHOW_MEDIA_OUTSIDE_PARCEL_SETTING;
typedef std::vector<LLViewerMediaImpl*> impl_list;
typedef std::list<LLViewerMediaImpl*> impl_list;
typedef std::map<LLUUID, LLViewerMediaImpl*> impl_id_map;

View File

@ -4928,6 +4928,11 @@ void LLViewerObject::setIncludeInSearch(bool include_in_search)
void LLViewerObject::setRegion(LLViewerRegion *regionp)
{
if (!regionp)
{
llwarns << "viewer object set region to NULL" << llendl;
}
mLatestRecvPacketID = 0;
mRegionp = regionp;

View File

@ -894,10 +894,10 @@ void LLViewerObjectList::removeDrawable(LLDrawable* drawablep)
BOOL LLViewerObjectList::killObject(LLViewerObject *objectp)
{
// Don't ever kill gAgentAvatarp, just mark it as null region instead.
// Don't ever kill gAgentAvatarp, just force it to the agent's region
if (objectp == gAgentAvatarp)
{
objectp->setRegion(NULL);
objectp->setRegion(gAgent.getRegion());
return FALSE;
}

View File

@ -2329,7 +2329,9 @@ void LLViewerWindow::handleScrollWheel(S32 clicks)
// Zoom the camera in and out behavior
if(top_ctrl == 0 && getWorldViewRectScaled().pointInRect(mCurrentMousePoint.mX, mCurrentMousePoint.mY) )
if(top_ctrl == 0
&& getWorldViewRectScaled().pointInRect(mCurrentMousePoint.mX, mCurrentMousePoint.mY)
&& gAgentCamera.isInitialized())
gAgentCamera.handleScrollWheel(clicks);
return;